下拉列表的选定项
本文关键字:下拉列表 | 更新日期: 2024-11-06 10:37:24
如何获取我的下拉列表的选定项目?
@using (Html.BeginForm("Doctors", "User", FormMethod.Get))
{
<input name="pageNumber" type="hidden" value="1" /><text>Hospital:</text><br />
@Html.DropDownList("HospitalId", (IEnumerable<SelectListItem>)ViewBag.HospitalList, new { style = "width:90%" }) <br />
<button type="submit" class="btn btn-mini"> Search </button>
}
这个问题对于您想要何时/何地获取下拉列表项不是很清楚。
我假设您现在想在控制器中拾取它。您需要做的是确保它包含在您发送给控制器的帖子中,并且使用正确的名称在服务器端读取表单时拾取。
下面是一个示例:
@Html.DropDownList("SubworkType", "Select Work Item", new { @Id = "SubworkId" , @Name = "SubworkId" })
如果您希望在视图侧抓取所选值,您可以执行以下操作:
var workerType = $("#WorkerTypeFilter option:selected").val()
它应该只是作为控制器操作方法中的参数进行访问。
public ActionResult Doctors(string pageNumber, string HospitalId)
{
// make use of HospitalId
...
}
我宁愿避免使用ViewBag
/ViewData
等动态变量并坚持使用强类型。
使用视图模型
public class AssignDoctorViewModel
{
//Other Properties also
public IEnumerable<SelectListItem> Hospitals { set;get;}
public int SelectedHospital { set;get;}
}
在我的 GET
Action 方法中,我会用填充的属性返回它
public ActionResult AssignDoctor
{
var vm=new AssignDoctorViewModel();
vm.Hospitals= new[]
{
new SelectListItem { Value = "1", Text = "Florance" },
new SelectListItem { Value = "2", Text = "Spark" },
new SelectListItem { Value = "3", Text = "Henry Ford" },
};
// can replace the above line with loading data from Data access layer.
return View(vm);
}
现在在您的视图中,它被强类型化为我们的 ViewModel 类
@model AssignDoctorViewModel
@using(Html.BeginForm())
{
@Html.DropDownListFor(x => x.SelectedHospital, Model.Hospitals, "Select..")
<input type="submit" value="save" />
}
现在,在 HTTPPOST
Action 方法中,可以通过访问 SelectedHospital
属性来获取 Selected 值
public ActionResult AssignDoctor(AssignDoctorViewModel model)
{
//check for model.SelectedHospital value
}
Shyju的回答很好,我只是想用一些指示来扩展Shyju所说的话。
每个视图使用一个视图模型,只包含您需要的数据,任何未使用的内容请删除。
您的域模型可能如下所示:
public class Hospital
{
public int Id { get; set; }
public string Name { get; set; }
}
您的视图模型可能如下所示:
public class DoctorHospitalViewModel
{
public int HospitalId { get; set; }
public IEnumerable<Hospital> Hospitals { get; set; }
}
您的视图可能如下所示(我将下拉列表放在表中以用于显示目的):
<table>
<tr>
<td class="edit-label">Hospital <span class="required">**</span></td>
<td>
@Html.DropDownListFor(
x => x.HospitalId,
new SelectList(Model.Hospital, "Id", "Name", Model.HospitalId),
"-- Select --"
)
@Html.ValidationMessageFor(x => x.HospitalId)
</td>
</tr>
</table>
您的控制器可能如下所示,并假设您希望在创建视图中使用此下拉列表:
public class HospitalController : Controller
{
private readonly IHospitalRepository hospitalRepository;
public HospitalController(IHospitalRepository hospitalRepository)
{
// Check that hospitalRepository is not null
this.hospitalRepository = hospitalRepository;
}
public ActionResult Create()
{
DoctorHospitalViewModel viewModel = new DoctorHospitalViewModel
{
Hospitals = hospitalRepository.GetAll()
};
return View(viewModel);
}
[HttpPost]
public ActionResult Create(DoctorHospitalViewModel viewModel)
{
// Check that viewModel is not null
if (!ModelState.IsValid)
{
viewModel.Hospitals = hospitalRepository.GetAll();
return View(viewModel);
}
// Do what ever needs to be done
// You can get the selected hospital id like this
int selectedHospitalId = viewModel.HospitalId;
return RedirectToAction("List");
}
}
我希望这有所帮助。