FormCollection Пусто в форме сообщения в ASP.NET-MVC - PullRequest
30 голосов
/ 02 февраля 2009

Я публикую очень простую форму, используя метод, который я часто использовал в прошлом. Может быть, проще показать мой код, чем набирать длинное объяснение. Вот HTML-код:

<% Html.BeginForm("CreateMarketingType", "ListMaintenance"); %>
    <div id="ListMaintenanceContainer">
        <table>
            <tr>
                <th>Marketing Type Id</th>
                <th>Marketing Type Name</th>
            </tr>                    
                <%foreach (MarketingType marketingType in ViewData.Model.MarketingTypes) %>
                <%{ %>
                    <tr>
                        <td><%= marketingType.MarketingTypeId.ToString() %></td>
                        <td><%= marketingType.MarketingTypeName %></td>
                    </tr>
                <%} %>
        </table>
        <div>
            <fieldset id="fsSaveNewMarketingType">
                <legend>Add New Marketing Type</legend>
                <label for="txtNewMarketingTypeName">New Marketing Type Name:</label>
                <input type="text" id="txtNewMarketingTypeName" />
                <input type="submit" value="Save" id="CreateMarketingType" />
            </fieldset>
        </div>                    
    </div>
<% Html.EndForm();%>

А вот код контроллера:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult CreateMarketingType(FormCollection form)
{
    string newMarketingTypeName = Request.Form["txtNewMarketingTypeName"].ToString();

    MarketingType newMarketingType = new MarketingType() { MarketingTypeName = newMarketingTypeName };

    _marketingTypeRepository.AddNewMarketingType(newMarketingType);

    return View("ListMaintenance", GetModel());
}

Кнопка отправки отправляет форму, и метод вызывается, но объект формы, определенный в моем параметре, пуст. Я также пробовал Request.Form и получаю тот же результат. Я что-то здесь упускаю?

Ответы [ 4 ]

89 голосов
/ 02 февраля 2009

Ни один из ваших входов не имеет атрибута имени. Без имени = нет в FormCollection.

3 голосов
/ 09 февраля 2011

У меня была эта проблема, а затем я понял, что отключил все элементы управления INPUT перед отправкой формы (как функция UX).

0 голосов
/ 21 июня 2017

Я вижу, что на этот вопрос уже дан ответ. Ниже приведен еще один подход, который я использовал в представлении MVC, когда коллекция форм была пустой. Используя JavaScript / jQuery, он устанавливает пары имя-значение для скрытого элемента управления, который добавляется в форму.

JavaScript / jQuery

 $("#btnExport").click(function (event) {
                event.preventDefault();

                //Append the parameter to the form
                var practiceVal = $('#Practice').val();
                $('<input />').attr('type', 'hidden')
                   .attr('name', "Practice").attr('value', practiceVal)
                   .appendTo('#formHome');

                //Submit
                $('#formHome').submit();
            });

форма

 <form id="formHome" method="post">
 </form>

См. Формы

Когда форма отправляется на обработку, некоторые элементы управления имеют name в паре с текущим значением, и эти пары отправляются с формой

0 голосов
/ 28 апреля 2010

Хотел бы я опубликовать это как простой комментарий, но у меня нет этой привилегии ... Я добавил все свои атрибуты имени, но все равно не радуюсь. Не забудьте добавить свой атрибут имени в вашу форму. Необходимо использовать перегрузку для HTML.BeginForm, которая принимает htmlAttributes.

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