Я искал это и нашел несколько решений, но ни одно из них не работает для меня.
Я использую Razor для создания MVC-представления.Модель, которую я передаю, определена следующим образом:
public class ActiveProxiesDTO
{
/// <summary> error message returned by the transaction </summary>
public string ErrorMsg { get; set; }
/// <summary> List of proxies returned by the transaction </summary>
public List<ActiveProxiesDetailDTO> ActiveProxies { get; set; }
}
/// <summary> A single proxy </summary>
public class ActiveProxiesDetailDTO
{
/// <summary> Proxie's PERSON id </summary>
public string ProxyId { get; set; }
/// <summary> Proxie's First Name </summary>
public string FirstName { get; set; }
/// <summary> Proxie's Last Name </summary>
public string LastName { get; set; }
/// <summary> Proxie's email address </summary>
public string EmailAddress { get; set; }
/// <summary> Does user want to reset this proxy's password?</summary>
public bool Reset { get; set; }
}
В методе действия, который вызывает представление, я установил для "Сброс" bool значение false для всех элементов в списке.
Мое представление определяется следующим образом:
@model Ellucian.Colleague.Dtos.Base.M32.ActiveProxiesDTO
@using (Html.BeginForm("PostResetProxy", "Core", FormMethod.Post, new { Area = "M32" }))
{
@Html.AntiForgeryToken()
<div class="dataentry">
Proxies:
<br />
<table>
<tr>
<th>Reset?</th> <th>Name</th> <th>Email Address(to send new password)</th>
</tr>
@for (int i = 0; i < Model.ActiveProxies.Count; i++)
{
<tr>
<td>
<!-- make sure all data bind to the model being passed to the next controller action method -->
<input type="hidden" name="ActiveProxies[@i].ProxyId" value="@Model.ActiveProxies[i].ProxyId" />
<input type="hidden" name="ActiveProxies[@i].FirstName" value="@Model.ActiveProxies[i].FirstName" />
<input type="hidden" name="ActiveProxies[@i].LastName" value="@Model.ActiveProxies[i].LastName" />
<!-- checkboxes require both a hidden and non-hidden input element -->
<input type="hidden" name="ActiveProxies[@i].Reset" value="@Model.ActiveProxies[i].Reset" />
<input type="checkbox" name="ActiveProxies[@i].Reset" value="true" />
</td>
<td>
@{ var displayName = Model.ActiveProxies[i].FirstName + " " + Model.ActiveProxies[i].LastName; }
@displayName
</td>
<td>
<input type="text" name="ActiveProxies[@i].EmailAddress" value="@Model.ActiveProxies[i].EmailAddress" />
</td>
</tr>
}
</table>
<br />
<input type="submit" />
...
на данный момент метод действия, обрабатывающий POST, просто:
[HttpPost]
public ActionResult PostResetProxy( ActiveProxiesDTO formData )
{
return Redirect(Url.Action("Index", "Home", new { Area = "" }));
}
Я устанавливаю точку останова в операторе возврата и проверяю содержимоеформы данных.Все выглядит правильно: присутствует весь список ActiveProxies. Если я введу адреса электронной почты в форму, они будут правильно отправлены в соответствующую запись списка.Проблема заключается в том, что, независимо от того, установлен я флажок «сброс» или нет, значение всегда передается как ложное.
Я пытался использовать Html.CheckBox и Html.CheckBoxFor различными способами, как описано в другом месте вэтот форум, но безуспешно.Я попытался использовать строку вместо bool для значения флажка, но это также не удалось.У меня нет идей.Кто-нибудь видит, что я делаю не так?- TIA Gus