Не удается получить форму ASP.NET MVC для публикации - PullRequest
1 голос
/ 23 декабря 2008

У меня проблемы с получением формы для отправки в метод 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 или дополнительные теги формы. Я извлекаю данные и заполняю их в эту форму, используя другой метод из того же контроллера. Я что-то здесь не так делаю?

1 Ответ

1 голос
/ 23 декабря 2008

Хорошо, получил ответ. И спасибо Крейгу за то, что он снова посмотрел на HTML! Моя главная страница сгенерировала тег формы без моего ведома, поэтому я по сути имел вложенные формы на той же странице. После того как я удалил форму из мастер-страницы, все заработало отлично.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...