我在将表单发布到控制器中的Save方法时遇到问题。我是MVC的新手,并且已经使用了几个示例来尝试使其工作。这是我的html标记:
<form action="Edit/Save" method="post">
<fieldset>
<legend>Personal Information</legend>
<table class="editGrid">
<tr>
<td><label for="txtFirstName">First Name:</label></td>
<td><input type="text" id="txtFirstName" value="<%=user.FirstName %>" name="FirstName" /></td>
</tr>
<tr>
<td><label for="txtLastName">Last Name:</label></td>
<td><input type="text" id="txtLastName" value="<%=user.LastName %>" name="LastName" /></td>
</tr>
<tr>
<td><label for="txtNtLogin">NT Login:</label></td>
<td><input type="text" id="txtNtLogin" value="<%=user.NtLogin %>" name="NtLogin" /></td>
</tr>
<tr>
<td><label for="txtHireDate">Hire Date:</label></td>
<td><input type="text" id="txtHireDate" value="<%=string.Format("{0:d}",user.HireDate) %>" name="HireDate" /></td>
</tr>
</table>
</fieldset>
<fieldset>
<legend>Job Information</legend>
<table class="editGrid">
<tr>
<td><label for="CostCenters">Cost Center:</label></td>
<td><%=Html.DropDownList("CostCenters")%></td>
</tr>
<tr>
<td><label for="Managers">Manager:</label></td>
<td><%=Html.DropDownList("Managers")%></td>
</tr>
<tr>
<td><label for="Responsibilities">Responsibility:</label></td>
<td><%=Html.DropDownList("Responsibilities")%></td>
</tr>
<tr>
<td><label for="Departments">Department:</label></td>
<td><%=Html.DropDownList("Departments")%></td>
</tr>
<tr>
<td><label for="Active">Active:</label></td>
<td><%=Html.CheckBox("Active",user.Active) %></td>
</tr>
<tr>
<td><label for="txtHireDate">Hire Date:</label></td>
<td><%=Html.TextBox("txtHireDate",string.Format("{0:d}",user.HireDate)) %></td>
</tr>
<tr>
<td><label for="txtReleaseDate">Release Date:</label></td>
<td><%=Html.TextBox("txtReleaseDate",string.Format("{0:d}",user.ReleaseDate)) %></td>
</tr>
</table>
</fieldset>
<input type="submit" value="Save Changes" />
</form>
此表单路由到EditController中的Save方法。这是我的EditController的Save方法的代码:
public class EditController : Controller
{
public ActionResult Save()
{
//Save code goes here
}
我尝试过使用html表单标记,以及Html帮助程序代码:
using (Html.BeginForm("Save", "Edit"))
以下是我在Global.asax文件中使用RegisterRoutes方法的条目:
routes.MapRoute("EditSave", "{controller}/Save",
new { controller = "Edit", action = "Save" });
无论我做什么,提交按钮都不会触发Save方法。但是,如果我手动键入Url,代码会直接进入Save方法。
编辑: 根据Craig Stuntz的评论,我检查了页面的来源。该页面实际上包含2个表单,虽然我自己只在页面上编码1个:这是我的表单标记之前出现的HTML:
<form name="aspnetForm" method="post" action="44" id="aspnetForm">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJNjM3OTAyNTUzZGQrHhVn9+t78aHxN0vHvKUJ8DQWlQ==" />
</div>
<div id="nav">
<span id="navLinks">
<a href="#">Placeholder Link</a>
</span>
<span id="userName">
<span id="ctl00_lblUserName" class="UserName">Welcome, Test User</span>
</span>
</div>
<div id="Content">
<div id="formContainer">
<form action="Edit/Save" method="post">
我不认为MVC生成了viewstate或其他表单标签。我正在使用来自同一控制器的另一种方法提取数据并将其填充到此表单中。我在这里做错了吗?
答案 0 :(得分:1)
好的,得到了答案。感谢Craig再次让我看看HTML!我的母版页在我不知情的情况下生成了一个表单标签,所以我基本上在同一页面上有嵌套表单。从Master Page中删除表单后,一切都运行良好。