我是ASP.NET MVC的新手,我遇到了Html.TextBoxFor()的问题 - 它将渲染输入的 name 属性赋予了一个点。
<%= Html.TextBoxFor(m => m.Box.Name, new { id= "txtName" }) %>
呈现以下HTML:
<input type="text" value="" name="Box.Name" id="txtName">
我正在使用jQuery Validation插件进行客户端验证。由于 Box.Name 中的点(导致javascript错误),它无法验证此输入。
我的模型看起来像这样:
public class Box {
[Required(ErrorMessage = "Please enter a name")]
public string Name { get; set; }
public int BoxMaterialID { get; set; }
}
我的ViewModel如下所示:
public class BoxViewModel
{
public Box Box { get; set; }
public List<BoxMaterial> BoxMaterial { get; set;}
}
我的控制器看起来像这样:
public ActionResult New(FormCollection postData)
{
Box box = new Box();
try
{
UpdateModel(box, "Box");
boxService.SaveBox(box);
}
catch
{
return View(new BoxViewModel(box));
}
return RedirectToAction("Index", "Boxes");
}
服务器端验证就像使用模型上的DataAnnotations的魅力一样。我似乎唯一的问题是客户端验证,因为“。”在name属性中。
感谢您的帮助!
答案 0 :(得分:6)
提交表单时,default model binder使用添加到名称中的点,以便正确填充模型。就验证而言,您可以这样设置:
$("#myForm").validate({
rules: {
'Box.Name': {
required: true
}
},
messages: {
'Box.Name': {
required: 'some error message'
}
}
});
答案 1 :(得分:0)
尝试同时指定name属性:
<%= Html.TextBoxFor(m => m.Box.Name, new { id= "txtName", name = "txtName" }) %>