我正在开发我的第一个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调用的新模型。
我花了一天时间在网上搜索任何类似的东西,但我找不到任何甚至开始描述这种行为的东西。
有没有其他人遇到过这个并知道我错了什么?
由于
答案 0 :(得分:2)
这是因为HTMLHelpers在使用Model之前会向ModelState查找值。
您必须清除ModelState条目才能使其生效。