在我的控制器的动作中,我有以下代码:
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:
我现在使用以下代码,但仍然验证不会触发:
public ActionResult GridAction(string id) { var myviewmodel= new Myviewmodel(); myviewmodel.SelectedGridAction = id; // id is passed as null if (!ModelState.IsValid) { return View("Orders"); }
更新4:
$("#linkGridAction").click(function () { alert('link grid action clicked'); $.get('GridAction/',{ SelectedGridAction: $("#SelectedGridAction").val() },function (result) { alert('success'); }); });
控制器如下所示:
// Orderviewmodel has a property called SelectedGridAction. public ActionResult GridAction(Orderviewmodel orderviewmodel) { return View(); }
更新5:验证没有触发:
public ActionResult GridAction(Orderviewmodel orderviewmodel) { if (!ModelState.IsValid) { return View("Orders",orderviewmodel); } return View(); }
解决方法
您可以使用视图模型:
public class Myviewmodel { [required] public string Id { get; set; } }
接着:
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 Myviewmodel { [required] public string SelectedItemId { get; set; } public IEnumerable<SelectListItem> Items { get { // Dummy data return new SelectList(Enumerable.Range(1,10) .Select(i => new SelectListItem { Value = i.ToString(),Text = "item " + i }),"Value","Text"); } } }
然后一个控制器:
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" /> <% } %>