Я работаю над своим первым веб-приложением MVC (используя Razor и C #) и столкнулся со странным поведением.
Я редактирую «строку» данных и использую ajax-вызовы для отправки и повторного отображения данных. Все работает отлично, даже если изменить существующие данные и сохранить их. Кроме того, если я просто заново отображаю «линию», которая была представлена, нет проблем.
Тем не менее, я хочу отобразить «новую» строку с некоторыми значениями из старой строки, оставленными без изменений, а остальные не отображаются.
Однако, когда я отправляю объект новой строки в частичное представление, «невидимые» значения не выбираются помощниками @Html ..... Но если я отображаю свойство модели напрямую, оно имеет правильное (пустое) значение.
Вот соответствующие разделы моего кода:
Контроллер Метод:
[HttpPost]
public ActionResult EditLineForm (SkuRequestLine ln)
{
SkuRequestLine newline = null;
try
{
if (ln.Store(true))
{
ViewData["prodcatdesc"] = DataConnection.GetProductCategory(ln.Category).description;
newline = new SkuRequestLine();
newline.Copy(ln);
newline.Line = DataConnection.NextSkuRequestLineNumber(ln.Request);
newline.Comments = "";
newline.Description = "";
newline.Vendorsku = "";
return PartialView("EditLineForm", newline); // this line is being executed.
}
else
{
return PartialView("EditLineForm", ln);
}
}
catch (Exception ex)
{
List<string> msgs = new List<string>();
while (ex != null)
{
msgs.Add(ex.Message);
ex = ex.InnerException;
}
return PartialView("EditLineForm", ln);
}
}
Код бритвы:
@model Sku_Management.Models.SkuRequestLine
@using (Ajax.BeginForm("EditLineForm", "SkuRequest", new AjaxOptions { OnSuccess = "UpdateLineList" }))
{
.
.
.
<tr>
<td>
<span class="editor-label">
@Html.LabelFor(model => model.Description)
</span>
</td>
<td colspan="5">
<span class="editor-field">
@Html.TextBoxFor(model => model.Description, new { @class = "fortywide" }) // Displays the Description from the edited Line passed in. Not what what Model.Description is.
@Html.ValidationMessageFor(model => model.Description)
</span>
<span>|@Model.Description|</span> // Displays "||" which is what it should be since Model.Description is blank.
</td>
</tr>
Единственное, о чем я могу думать, это то, что model => model.Description использует кэшированную версию Model, а не новую модель, переданную в вызов PartialView.
Я провел целый день в поисках чего-то похожего в Интернете, но не могу найти ничего, что даже начинает описывать это поведение.
Кто-нибудь еще сталкивался с этим и знает, в чем я не прав?
Спасибо