Html.TextBox不使用新Model对象的值

时间:2011-06-20 15:16:34

标签: c# asp.net-mvc razor

我正在开发我的第一个MVC Web应用程序(使用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);
        }
    }

Razor Code:

@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 =&gt; model.Description使用的是模型的缓存版本,而不是传递给PartialView调用的新模型。

我花了一天时间在网上搜索任何类似的东西,但我找不到任何甚至开始描述这种行为的东西。

有没有其他人遇到过这个并知道我错了什么?

由于

1 个答案:

答案 0 :(得分:2)

这是因为HTMLHelpers在使用Model之前会向ModelState查找值。

您必须清除ModelState条目才能使其生效。