在我的控制器的动作中,我有以下代码:
- public ActionResult GridAction(string id)
- {
- if (String.IsNullOrEmpty(id))
- {
- // add errors to the errors collection and then return the view saying that you cannot select the dropdownlist value with the "Please Select" option
- }
- return View();
- }
更新:
- if (String.IsNullOrEmpty(id))
- {
- // add error
- ModelState.AddModelError("GridActionDropDownList","Please select an option");
- return RedirectToAction("Orders");
- }
更新2:
这是我更新的代码:
- @Html.DropDownListFor(x => x.SelectedGridAction,Model.GridActions,"Please Select")
- @Html.ValidationMessageFor(x => x.SelectedGridAction)
该模型如下所示:
- public class MyInvoicesviewmodel
- {
- private List<SelectListItem> _gridActions;
- public int CurrentGridAction { get; set; }
- [required(ErrorMessage = "Please select an option")]
- public string SelectedGridAction { get; set; }
- public List<SelectListItem> GridActions
- {
- get
- {
- _gridActions = new List<SelectListItem>();
- _gridActions.Add(new SelectListItem() { Text = "Export to Excel",Value = "1" });
- return _gridActions;
- }
- }
- }
这里是我的控制器动作:
- public ActionResult GridAction(string id)
- {
- if (String.IsNullOrEmpty(id))
- {
- // add error
- ModelState.AddModelError("SelectedGridAction","Please select an option");
- return RedirectToAction("Orders");
- }
- return View();
- }
什么都没发生!我完全迷失在这一个!
更新3:
我现在使用以下代码,但仍然验证不会触发:
更新4:
- $("#linkGridAction").click(function () {
- alert('link grid action clicked');
- $.get('GridAction/',{ SelectedGridAction: $("#SelectedGridAction").val() },function (result) {
- alert('success');
- });
- });
控制器如下所示:
更新5:验证没有触发:
解决方法
您可以使用视图模型:
接着:
- public ActionResult GridAction(Myviewmodel model)
- {
- if (ModelState.IsValid)
- {
- // the model is valid,the user has selected an id => use it
- return RedirectToAction("Success");
- }
- return View();
- }
更新:
在对我的答复的数百条评论之后,我觉得有必要提供一个充分的工作实例:
像往常一样,从视图模型开始:
然后一个控制器:
- public class HomeController: Controller
- {
- public ActionResult Index()
- {
- return View(new Myviewmodel());
- }
- [HttpPost]
- public ActionResult Index(Myviewmodel model)
- {
- if (!ModelState.IsValid)
- {
- // The user didn't select any value => redisplay the form
- return View(model);
- }
- // TODO: do something with model.SelectedItemId
- return RedirectToAction("Success");
- }
- }
最后的看法:
- <% using (Html.BeginForm()) { %>
- <%= Html.DropDownListFor(
- x => x.SelectedItemId,Model.Items,"-- Select Item --"
- ) %>
- <%= Html.ValidationMessageFor(x => x.SelectedItemId) %>
- <input type="submit" value="OK" />
- <% } %>