У меня проблемы с получением формы для отправки в метод 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>
Эта форма направляет метод Save в мой EditController. Вот код для метода Save моего EditController:
public class EditController : Controller
{
public ActionResult Save()
{
//Save code goes here
}
Я попытался использовать тег формы html, а также код помощника Html:
using (Html.BeginForm("Save", "Edit"))
Вот запись из моего метода RegisterRoutes в файле Global.asax:
routes.MapRoute("EditSave", "{controller}/Save",
new { controller = "Edit", action = "Save" });
Независимо от того, что я делаю, кнопка отправки не вызывает метод Save. Тем не менее, если я вручную введу URL-адрес, код разбивается прямо в метод Save.
Edit:
По комментарию Крейга Стунца, я проверил источник страницы. На самом деле страница содержит 2 формы, хотя только одна закодирована на этой странице: 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 или дополнительные теги формы. Я извлекаю данные и заполняю их в эту форму, используя другой метод из того же контроллера. Я что-то здесь не так делаю?