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

时间:2010-06-27 14:30:49

标签: asp.net-mvc validation jquery-validate

我是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属性中。

感谢您的帮助!

2 个答案:

答案 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" }) %>