Ответ 1
Ни один из ваших входов не имеет атрибута имени. Нет имени = нет в FormCollection.
Я отправляю очень простую форму, используя метод, который я часто использовал в прошлом. Может быть проще показать мой код, а не вводить длинное объяснение. Здесь 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 и получил тот же результат. Я что-то пропустил?
Ни один из ваших входов не имеет атрибута имени. Нет имени = нет в FormCollection.
У меня была эта проблема, а затем я понял, что отключил все элементы управления INPUT до того, как я отправил форму (как функцию UX).
Желаю, чтобы я опубликовал это как простой комментарий, но у меня нет этой привилегии... Я добавил все свои атрибуты имени и до сих пор не испытываю радости. Не забудьте добавить свой атрибут имени в свою форму. Необходимо использовать перегрузку для HTML.BeginForm, которая принимает htmlAttributes.
Я вижу, что на этот вопрос уже дан ответ. Ниже приведен другой подход, который я использовал в представлении 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
в паре с их текущим значением, и эти пары отправляются с формой