2

我有一个与强类型 ViewModel 相关联的视图,但我没有使用 MVC3 HTML 帮助程序,只是使用普通的 HTMLinput标记。但是,这似乎没有将值正确传递给操作方法,因为 ViewModel 完全为空。

视图模型:

class QuoteSearch {
    public long? CustomerId { get; set; }
    public string CustomerFirstName { get; set; }
    public string CustomerLastName { get; set; }
}

看法:

@model QuoteSearch

<form action="/quotes/search" method="POST">
    <p>Customer ID: <input id="CustomerIdField" name="CustomerId" type="text" /></p>
    <p>Customer First Name: <input id="CustomerFirstNameField" name="CustomerFirstName" type="text"/></p>
    <p>Customer Last Name: <input id="CustomerLastNameField" name="CustomerLastName" type="text"/></p>
    <p><button id="SearchButton" type="submit">Search</button></p>
</form>

控制器:

 [HttpPost]
 public ActionResult Search(QuoteSearch search) { 
     // checking if fields are set here.
 }

我似乎记得有一种方法不必使用 Html 助手但仍使用强类型模型(而不是 a FormCollection);我认为它涉及将 name 属性设置为模型上属性的确切名称,但我似乎弄错了。

4

2 回答 2

1

您的名称并非全部对齐(如评论中所建议的那样),但对于对齐的字段,当我执行上述代码时,模型已正确填充(名称在那里,CustomerId 为空)。

您是否设置了断点,并且您知道代码正在被命中吗?

还请确认您的控制器名为 Quotes。即使是这样,您也会更好地使用:

<form action="@Url.Action("search", "quotes")" method="POST">

...即使您添加区域等,路由也能正常工作。Url 助手将根据您的路由规则为请求计算出正确的路径。

最后,如果您没有通过设置断点到达该执行点,请务必使用 F12/dev 工具来监控您的网络请求并确保调用了正确的地址。上面的代码片段也应该有助于解决这个问题。

希望对一些人有所帮助。

于 2012-07-06T16:17:33.770 回答
0

尝试 name="[ViewModel].[FieldName]" 和 id="[ViewModel]_[FieldName]"

这些是我在使用 HTML 帮助程序时输入标签中的值。

所以对你来说,这将是:

<input type="text" name="QuoteSearch.CustomerId" id="QuoteSearch_CustomerId" />

ETC..

于 2012-07-06T17:40:22.490 回答