0

这个问题很奇怪,也许我错过了一些小细节,因为我是 mvc 3 的新手......

在局部视图中,我的模型与主视图中的模型不同(我认为在这种情况下并不重要)。我在视图中添加了几个验证助手调用。无论我做什么,它们都不会出现在页面上。

我启用了框架源代码调试,我可以看到 HTML 已生成,并被写入“输出”。不过,它们不会出现在最终呈现的页面中。我不明白为什么。

在我的部分观点中:

@model ModelsDTO.Domain.GridRowDTO
@Html.ValidationSummary()
@Html.TextBox("Kalla")
@Html.ValidationMessage("Kalla")

我有文本框只是为了看看它是否呈现。确实如此。

我的控制器代码(硬编码消息,只是为了让它工作):

[HttpPost]
public ActionResult SaveGridRow(GridRowDTO rad)
{
    List<string> valideringsFel = _dagboksanteckning.SaveDagbokObjekt(rad);

    ModelState.AddModelError("Kalla", "Källan felaktig");

    return PartialView("_DagbokGrid", rad);
}

该模型:

public class GridRowDTO
{
    public string Kronika { get; set; }
    public string Ok { get; set; }
    public string Datum { get; set; }
    public string Tid { get; set; }
    public string Kalla { get; set; }
    public string Handelse { get; set; }
    public string Bedomning { get; set; }
    public string Till { get; set; }
    public string Rubrik { get; set; }
    public string Verksamhetsslag { get; set; }
    public string OperationPadrag { get; set; }
    public string Verksamhetskod { get; set; }
    public string LatitudTecken { get; set; }
    public string Latitud { get; set; }
    public string LongitudTecken { get; set; }
    public string Longitud { get; set; }
    public string Media { get; set; }
    public string AnnatDokument { get; set; }
    public string Region { get; set; }
    public string id { get; set; }
}

编辑,非常有趣的发现!

使用 IE9 F12 模式跟踪调用时,响应文本实际上包含预期的 HTML!为什么不渲染!

<div class="validation-summary-errors"><ul><li>K&#228;llan felaktig</li>
</ul></div>

<input class="input-validation-error" id="Kalla" name="Kalla" type="text" value="1" />
<span class="field-validation-error">K&#228;llan felaktig</span>

如果我能得到一些帮助来理解这个问题,我将非常感激。

4

1 回答 1

2

如果您使用 AJAX 调用此控制器操作,则应确保将部分内容替换为新值。例如,假设您的部分包装在 div 中:

<div id="container">
    @Html.Patrial(....)
</div>

现在在成功回调中确保您已刷新 div 的内容:

$.ajax({
    url: '@Url.Action("SaveGridRow")',
    type: 'POST',
    data: ...,
    success: function(result) {
        // Here you must refresh the div or whatever part of the DOM
        // you need to update
        $('#container').html(result);
    }
});

或者,如果您使用 Ajax.* 助手来调用该操作,请确保您已UpdateTargetId在 AjaxOptions 中指定并且该值对应于您要刷新的某些 DOM 元素的 id。

于 2012-04-20T06:56:00.510 回答