ValidationMessage在我的视图中不呈现(asp.mvc3)

时间:2012-04-20 06:05:14

标签: c# asp.net-mvc asp.net-mvc-3 validation

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

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

我启用了框架源代码调试,我可以看到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>

如果我能得到一些帮助来理解这个问题,我真的很感激。

1 个答案:

答案 0 :(得分:2)

如果使用AJAX调用此控制器操作,则应确保使用新值替换partial的内容。例如,假设您的partial包含在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。*帮助程序来调用该操作,请确保在AjaxOptions中指定了UpdateTargetId,并且该值对应于您要刷新的某个DOM元素的id。