ASP.NET MVC - 停止Html.TextBox为Name属性添加一个点

cja*_*ues 2 validation asp.net-mvc jquery-validate

我是ASP.NET MVC的新手,我遇到了Html.TextBoxFor()的问题 - 它给渲染输入的name属性一个点.

<%= Html.TextBoxFor(m => m.Box.Name, new { id= "txtName" }) %>
Run Code Online (Sandbox Code Playgroud)

呈现以下HTML:

<input type="text" value="" name="Box.Name" id="txtName">
Run Code Online (Sandbox Code Playgroud)

我正在使用jQuery Validation插件进行客户端验证.由于Box.Name中的点(导致javascript错误),它无法验证此输入.

我的模型看起来像这样:

public class Box {
   [Required(ErrorMessage = "Please enter a name")]
   public string Name { get; set; }
   public int BoxMaterialID { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我的ViewModel看起来像这样:

public class BoxViewModel
{
    public Box Box { get; set; }
    public List<BoxMaterial> BoxMaterial { get; set;}
}
Run Code Online (Sandbox Code Playgroud)

我的控制器看起来像这样:

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");
}
Run Code Online (Sandbox Code Playgroud)

服务器端验证就像使用模型上的DataAnnotations一样.我似乎唯一的问题是客户端验证,因为"." 在name属性中.

谢谢你的帮助!

Dar*_*rov 6

提交表单时,默认模型绑定器将使用添加到名称的点,以便正确填充模型.就验证而言,您可以将其设置为:

$("#myForm").validate({
    rules: {
        'Box.Name': {
            required: true
        }
    },
    messages: {
        'Box.Name': {
            required: 'some error message'
        }
    }
});
Run Code Online (Sandbox Code Playgroud)