У меня есть представление, которое отображает записи в таблице с флажками для выбора и обновления пользователем. Однако, если у меня есть 3 записи в таблице, Data [0], Data [1], Data [2], и я выбираю только флажок для Data [0] и POST его к контроллеру, то когда на экран возвращается Data Флажок [1] теперь имеет состояние отправленных данных [0] (true
). Однако база данных показывает значение флажка 0 (false) для данных [1]. Мое единственное предположение - что-то с привязкой модели, или мне нужно было бы сохранить состояния флажка, как-то.
Модель
public class DrinkingWaterModel
{
//contains all properties of the FPDrinkingWater Entity
public List<FPDrinkingWater> Data { get; set; }
public AlertModel SuccessAlert { get; set; }
public AlertModel FailureAlert { get; set; }
}
Метод GET
public async Task<ActionResult> UnverifiedDrinkingWaterLog(AlertModel
successAlert, AlertModel failureAlert)
{
//get unverified data from the db
var data = (from s in await Manager.Store.GetAllAsync<FPDrinkingWater>()
where s.Verified.Equals(false)
select s).ToList();
//fill the model
DrinkingWaterModel model = new DrinkingWaterModel
{
SuccessAlert = successAlert,
FailureAlert = failureAlert,
Data = data
};
return PartialView("_UnverifiedFPDrinkingWaterTable", model);
}
Вид
@model MyApplication.Areas.FP.Models.DrinkingWaterModel
@{
Layout = null;
}
<div>
@Html.AntiForgeryToken()
<table id="UnverifiedDrinkingWaterTable" class="table table-hover">
<thead>
<tr>
<th>@Html.LabelFor(m => m.Data.FirstOrDefault().SID)</th>
<th>@Html.LabelFor(m => m.Data.FirstOrDefault().Location)</th>
<th>@Html.LabelFor(m => m.Data.FirstOrDefault().Replicate)</th>
<th>@Html.LabelFor(m => m.Data.FirstOrDefault().CollectionDate)</th>
<th>@Html.LabelFor(m => m.Data.FirstOrDefault().CollectionTime)</th>
<th>@Html.LabelFor(m => m.Data.FirstOrDefault().Collectors)</th>
<th>@Html.LabelFor(m => m.Data.FirstOrDefault().Clorinated)</th>
<th>@Html.LabelFor(m => m.Data.FirstOrDefault().Comments)</th>
<th>@Html.LabelFor(m => m.Data.FirstOrDefault().Verified)</th>
</tr>
</thead>
<tbody>
@for (int i = 0; i < Model.Data.Count(); i++)
{
<tr>
@Html.HiddenFor(m => m.Data[i].Id)
@Html.HiddenFor(m => m.Data[i].SID)
<td>@Html.DisplayFor(m => m.Data[i].SID)</td>
@Html.HiddenFor(m => m.Data[i].Location)
<td>@Html.DisplayFor(m => m.Data[i].Location)</td>
@Html.HiddenFor(m => m.Data[i].Replicate)
<td>@Html.DisplayFor(m => m.Data[i].Replicate)</td>
@Html.HiddenFor(m => m.Data[i].CollectionDate)
<td>@Html.DisplayFor(m => m.Data[i].CollectionDate)</td>
@Html.HiddenFor(m => m.Data[i].CollectionTime)
<td>@Html.DisplayFor(m => m.Data[i].CollectionTime)</td>
@Html.HiddenFor(m => m.Data[i].Collectors)
<td>@Html.DisplayFor(m => m.Data[i].Collectors)</td>
@Html.HiddenFor(m => m.Data[i].Clorinated)
<td>@Html.DisplayFor(m => m.Data[i].Clorinated)</td>
@Html.HiddenFor(m => m.Data[i].Comments)
<td>@Html.DisplayFor(m => m.Data[i].Comments)</td>
<td>@Html.EditorFor(v => v.Data[i].Verified) </td>
</tr>
}
@if (Model.Data.Count() == 0)
{
<tr>
<td colspan="@Html.ColumnCount(9)"><em>No Drinking Water data to verify.</em></td>
</tr>
}
</tbody>
</table>
@if (verify)
{
<button type="submit" class="btn btn-primary" data-loading-text="Verifying...">Verify</button>
}
</div>
<script>
$(document).ready(function () {
makeDataTable('UnverifiedDrinkingWaterTable')
});
$('#RefreshDrinkingWater').click();
</script>
Метод POST
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> VerifyDrinkingWater([System.Web.Http.FromBody] DrinkingWaterModel model)
{
var successAlert = new AlertModel();
var failureAlert = new AlertModel();
if (ModelState.IsValid)
{
List<string> successes = new List<string>();
List<string> failures = new List<string>();
foreach (var verifiable in model.Data)
{
if (verifiable.Verified != false)
{
verifiable.Verified = true;
verifiable.VerifiedDate = DateTime.Now;
verifiable.VerifiedBy = User.Identity.Name;
var result = await Manager.VerifyAsync(verifiable);
}
}
}
else
{
InvalidState(failureAlert);
}
//return the GET method to update and refresh the table
return await UnverifiedDrinkingWaterLog(successAlert, failureAlert);
}