Здесь есть несколько похожих вопросов, которые я проверил, но ни один из них не отвечает на мою проблему, поэтому надеюсь, что кто-нибудь мне поможет.
У меня есть форма в виде и частичное представлениеЯ использую как подчиненную форму.Частичное представление используется для отображения списка элементов.(Снимок экрана ниже, чтобы показать, как это выглядит).
В частичном представлении каждый элемент имеет флажок, который пользователь может установить, чтобы удалить его.Если я отмечаю флажок для первого элемента, первый элемент удаляется из списка в коде, но когда модель возвращается в представление, возвращается не тот элемент (отмеченный элемент).
Таким образом, в приведенном ниже примере, если я проверяю первый элемент (Нет задержки ответа = 18) и отправляю, этот же элемент остается на странице, а другой (Нет задержки ответа = 10) исчезает.Если я затем перезагружаю все данные, появляется правильный элемент (No Response Delay = 10).
Я проверил в методе, что правильные данные передаются обратно, но неправильный элемент остается на странице.Если я обновлю страницу, появится правильный элемент.Обратите внимание, что метод был немного продезинфицирован, но правильный элемент действительно удаляется из базы данных.
Еще одна вещь, на которую следует обратить внимание, это плагин для стороннего продукта, поэтому я не могу запустить его, пока не опубликую вдругой продукт, что затрудняет отладку.
Код для основного вида:
@using(Html.BeginForm("SaveCallFeatures", "CallFeatures", FormMethod.Post, new { id = "CallFeatures", name = "CallFeatures" }))
{
@Html.AntiForgeryToken()
<div>
<h2>Call Features</h2>
<div class="form-panel">
<h4>Telephone Call Features</h4>
<div>
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.LabelFor(model => model.phoneNumber, htmlAttributes: new { @class = "label" })
@Html.EditorFor(model => model.phoneNumber, new { htmlAttributes = new { @class = "form-control", @readonly = "readonly" } })
@Html.ValidationMessageFor(model => model.phoneNumber, "", new { @class = "text-danger" })
</div>
<div>
@Html.LabelFor(model => model.password, htmlAttributes: new { @class = "label" })
@Html.EditorFor(model => model.password, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.password, "", new { @class = "text-danger" })
</div>
<div>
@Html.LabelFor(model => model.hideOutgoingCallerID, htmlAttributes: new { @class = "label" })
@Html.CheckBoxFor(model => model.hideOutgoingCallerID, new { htmlAttributes = new { @class = "form-control" } })
</div>
<div>
@Html.LabelFor(model => model.callWaiting, htmlAttributes: new { @class = "label" })
@Html.CheckBoxFor(model => model.callWaiting, new { htmlAttributes = new { @class = "form-control" } })
</div>
</div>
<div id="ForwardRules">
@Html.Partial("_ForwardingRules")
</div>
</div> //form
@Html.TextArea("Test")
<div id="form-buttons" class="col-md-offset-4 col-md-6">
<input type="button" value="Save" id="save-button" class="btn btn-primary" />
</div>
<script type="text/javascript">
$("#update-button").on('click', function () {
GetFwdRules();
});
</script>
function GetFwdRules() {
$.ajax
({
url: '@Url.Action("GetFwdRules", "CallFeatures", new { boid = Model.CompanyId })',
method: 'GET',
data: $("#CallFeatures").serialize(),
cache: false,
success: function (returnData) {
$("#ForwardRules").html(returnData);
$("#Test").html(returnData);
alert('GetFwdRules');
},
failure: function () {
alert('GetFwdRules Failure');
}
});
}
Код для частичного просмотра:
@model XXXXX.Models.CallFeaturesModel
<div class="form-panel">
<h4>Active Forwarding Rules</h4>
@for(int i = 0; i < Model.FwdRules.Count; i++)
{
<div>
@Html.HiddenFor(model => Model.FwdRules[i].ForwardingRuleID)
</div>
<div>
@Html.LabelFor(model => Model.FwdRules[i].Condition)
@Html.TextBoxFor(model => Model.FwdRules[i].Condition, new { htmlAttributes = new { @class = "form-control", @readonly = "readonly" } })
</div>
<div>
@Html.LabelFor(model => Model.FwdRules[i].Destination)
@Html.TextBoxFor(model => Model.FwdRules[i].Destination, new { htmlAttributes = new { @class = "form-control", @readonly = "readonly" } })
</div>
<div>
@Html.LabelFor(model => Model.FwdRules[i].NoAnswerDelay)
@Html.TextBoxFor(model => Model.FwdRules[i].NoAnswerDelay)
@Html.DescriptionFor(model => model.FwdRules[i].NoAnswerDelay)
</div>
<div>
@Html.LabelFor(model => Model.FwdRules[i].ToDelete)
@Html.CheckBoxFor(model => Model.FwdRules[i].ToDelete)
</div>
<br />
}
Это метод
[HttpGet]
public ActionResult GetFwdRules(CallFeaturesModel CFModel)
{
// Refresh the list to include on those where the ToDelete variable == false (checkbox is unchecked)
CFModel.FwdRules = CFModel.FwdRules.Where(x => x.ToDelete == false).ToList();
return PartialView("_ForwardingRules", CFModel);
}
А это модель
public class CallFeaturesModel : UIPluginBaseModel
{
[Display(Name = "Phone Number")]
public string phoneNumber { get; set; }
[Display(Name = "Password")]
public string password { get; set; }
[Display(Name = "Hide Outgoing Caller ID")]
public bool hideOutgoingCallerID { get; set; }
[Display(Name = "Call Waiting")]
public bool callWaiting { get; set; }
[Display(Name = "Message")]
public string Message { get; set; }
public IList<ActiveForwardRule> FwdRules { get; set; }
}
public class ActiveForwardRule
{
[Display(Name = "Rule ID")]
public string ForwardingRuleID { get; set; }
[Display(Name = "Condition")]
public string Condition { get; set; }
[Display(Name = "Destination")]
public string Destination { get; set; }
[Display(Name = "No Answer Delay", Description = " seconds (approx. 6 seconds for each ring cycle)")]
public int NoAnswerDelay { get; set; }
[Display(Name = "Delete")]
public bool ToDelete { get; set; }
}
Вот скриншот с примером.Похоже, мне пока не разрешено вставлять изображение.
![Screenshot](https://i.stack.imgur.com/Exd0w.png)
Надеясь, что кто-то может указать, где я иду не так.