ASP.NET MVC模型绑定器的问题

时间:2009-10-29 08:50:00

标签: asp.net-mvc

使用此控制器方法: -

    [AcceptVerbs(HttpVerbs.Post)]
    public ViewResult Contact(Contact contactMessage)
    {
        return View();
    }

为什么这样做......

public class Contact
{
    public string Name { get; set; }
    public string Email { get; set; }
    public string Message { get; set; }
}

<% using(Html.BeginForm()) { %>
<p>Name : <%= Html.TextBox("Name")%></p>
<p>Email : <%= Html.TextBox("Email")%></p>
<p>Message : <%= Html.TextBox("Message")%></p>
<p><input type="submit" value="Send Data" /></p>

但这不是吗?

public class Contact
{
    public string ContactName { get; set; }
    public string ContactEmail { get; set; }
    public string ContactMessage { get; set; }
}

<p>Name : <%= Html.TextBox("ContactName")%></p>
<p>Email : <%= Html.TextBox("ContactEmail")%></p>
<p>Message : <%= Html.TextBox("ContactMessage")%></p>
<p><input type="submit" value="Send Data" /></p>

请不要告诉我,字段名称只是部分识别?

相信我 - 我所做的只是将“联系人”文本添加到对象中的每个字段以及表单中的每个字段。它几乎就像MVC混淆了所有以相同的前7个字符开头的字段。

是什么给出了?

任何人都可以对此有所了解吗?

保罗。

4 个答案:

答案 0 :(得分:4)

我目前找不到任何合理的解释,为什么第二个不起作用。但是,如果您将操作签名更改为如下所示,则该方法有效:

public ViewResult Index([Bind(Prefix="")]Contact contactMessage)

我想这与DefaultModelBinder有关。


更新: 好的,这开始真的很有趣:

// Not working
public ViewResult Index(Contact contactMessage)

// Not working
public ViewResult Index(Contact contactmessage)

// Working
public ViewResult Index(Contact contact)

// Working
public ViewResult Index(Contact contactMsg)

// Working
public ViewResult Index(Contact abc)
确实很奇怪!


UPDATE2:

好的,明白了。您的模型中有一个名为ContactMessage的属性,该操作中传递的变量名称也称为contactMessage。这就是模糊性的来源。 DefaultModelBinder中没有错误。他不能同时绑定到string和Contact类型的属性,关闭案例: - )

答案 1 :(得分:2)

刷新浏览器时是否可以自动重新编译视图,但是自更改属性名称后整个项目还没有重建?

答案 2 :(得分:1)

对文本框进行编码,如下所示:

 <%=html.TextBox("Contact.Name")%>

你的动作签名是这样的:

public ViewResult Index([Bind(Prefix="Contact")]Contact contactMessage)

我希望这会有所帮助,祝你好运

答案 3 :(得分:0)

<% using(Html.BeginForm()) { %> 
您的非工作示例中缺少

或..也许contactMessage参数名称与表单帖子中的变量号冲突。

相关问题