Html.TextBox для не использования значения нового объекта Model - PullRequest
1 голос
/ 20 июня 2011

Я работаю над своим первым веб-приложением 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.

Я провел целый день в поисках чего-то похожего в Интернете, но не могу найти ничего, что даже начинает описывать это поведение.

Кто-нибудь еще сталкивался с этим и знает, в чем я не прав?

Спасибо

1 Ответ

2 голосов
/ 20 июня 2011

Это потому, что HTMLHelpers ищет ModelState для значений перед использованием Model.

Вам нужно очистить записи ModelState, чтобы заставить это работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...