我有一个与强类型ViewModel绑定的视图,但我不使用MVC3 HTML帮助程序,只是普通的HTML input
标记。但是,这似乎没有正确地将值传递给action方法,因为ViewModel完全为null。
视图模型:
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助手,但仍然使用强类型模型(而不是FormCollection
);我认为这涉及将name属性设置为模型上属性的确切名称,但我似乎错了。
答案 0 :(得分:1)
您的名称并非全部对齐(如注释中所示),但对于排队的字段,在执行上述代码时会正确填充模型(名称在那里,CustomerId为null)。
您是否设置了断点,并且知道代码被命中了吗?
还请确认您的控制器名为Quotes。即使它是,你最好使用:
<form action="@Url.Action("search", "quotes")" method="POST">
...即使您添加区域等,路由仍然有效.Url帮助程序将根据您的路由规则计算出请求的正确路径。
最后,如果您没有使用断点设置执行该执行点,请务必使用F12 / dev工具监视您的网络请求并确保调用正确的地址。上面的代码片段也应该有助于解决这个问题。
希望有所帮助。
答案 1 :(得分:0)
尝试name =“[ViewModel]。[FieldName]”和id =“[ViewModel] _ [FieldName]”
这些是我在使用HTML帮助程序时输入标记中的值。
所以对你来说就是:
<input type="text" name="QuoteSearch.CustomerId" id="QuoteSearch_CustomerId" />
等。