Asp.net mvc 如何在ASP.NETMVC中预填充表单?
当您有一个由Html.BeginForm()创建的ASP.Net MVC表单时,如何填充表单中的字段?就Asp.net mvc 如何在ASP.NETMVC中预填充表单?,asp.net-mvc,ajax,forms,Asp.net Mvc,Ajax,Forms,当您有一个由Html.BeginForm()创建的ASP.Net MVC表单时,如何填充表单中的字段?就 <asp:Content ID="Main" ContentPlaceHolderID="MainContent" runat="server"> <h2>Edit Dinner</h2> <%= Html.ValidationSummary("Please correct the errors and try again.") %> <
<asp:Content ID="Main" ContentPlaceHolderID="MainContent" runat="server">
<h2>Edit Dinner</h2>
<%= Html.ValidationSummary("Please correct the errors and try again.") %>
<% using (Html.BeginForm()) { %>
<p>
<label for="Title">Dinner Title:</label>
<%= Html.TextBox("Title") %>
<%= Html.ValidationMessage("Title", "*") %>
</p>
并将其用作模型,得到正确的值。或者至少在验证失败并且表单重新显示时是这样
我这样问是因为我有一个表单案例,它是通过AJAX(使用AJAX.BeginForm())提交的,表单会被刷新。我正在为它创建一个新的模型对象empty,但它仍在加载上次提交的值。当我在没有AJAX的情况下提交时,一切都很好
更新
我正在监视模板中的调试器。Model.Dinner.Title等于“”,但Html.TextArea(“Title”,Model.Dinner.Title)将上一个提交的值放入文本区域内。您还可以强制值为空:
<% =Html.TextBox("Title", null, new { @value = '' }); %>
不过,将空模型(默认值)传递给视图会更好吗编辑我明白了,这就是你要做的;)。根据我的第一个建议,检查该请求是否为AJAX请求,然后在此基础上将emtpy@值传递到文本框。我不确定我是否理解该问题。您执行了一个ajax请求,但表单中的文本字段在调用后仍保留其值 如果是这种情况,那么您应该检查这些文本字段是否位于与AjaxOption类的UpdateTargetId属性相关联的元素内。在执行ajax请求时,只更新页面的一部分(UpdateTargetId属性引用的部分)。无论是否更新模型,页面中的其余字段都不会更新。看看这个例子:
<%= Html.TextBox("Title") %>
....
<div id="myDiv">
<%= Html.TextBox("SomeField") %>
</div>
<% using (Ajax.BeginForm(new AjaxOptions() { UpdateTargetId = "myDiv" })) {%>
//... blah blah blah
<% } %>
....
//... 废话废话
当您提交ajax表单时,只有SomeField字段将得到更新,Title字段将保持不变
提交常规表单时,整个页面都会更新,这就是为什么所有字段都会在没有ajax的情况下更新
编辑:打字。数据存储在ModelState中。HtmlHelper方法将根据表单元素的名称查找存储在模型状态中的值。重定向时会清理ModelState,但在返回时不会清理ModelState,就像AJAX调用一样。我将向视图传递一个空模型。
<%= Html.TextBox("Title") %>
....
<div id="myDiv">
<%= Html.TextBox("SomeField") %>
</div>
<% using (Ajax.BeginForm(new AjaxOptions() { UpdateTargetId = "myDiv" })) {%>
//... blah blah blah
<% } %>