2012-04-20 79 views
0

这个问题很奇怪,也许我已经错过了一些小细节,因为我是新来的MVC 3 ...ValidationMessage并不在我看来渲染(asp.mvc3)

在局部视图,我有一个不同于主视图的模型(我认为这不重要)。我在视图中添加了几个验证辅助调用。无论我做什么,他们都不会出现在页面上。

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

我会真的心存感激,如果我能得到一些援助,来理解这个问题。

+0

请粘贴乌尔模型的代码。“拉德” – 2012-04-20 06:09:23

+0

是请求AJAX或HTTP请求 – Yorgo 2012-04-20 06:10:48

+0

这..... AJAX我认为(保存网格行的jqGrid时做什么)。 – kaze 2012-04-20 06:25:24

回答

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 *助手要调用该操作,请确保您在AjaxOptions中指定了UpdateTargetId,并且此值与您要刷新的某个DOM元素的ID相对应。

+0

谢谢!你救了我的一天! – kaze 2012-04-20 07:49:58

+0

地狱是啊!这次真是万分感谢!我知道足够多的MVC.NET是危险的(但并不足够jQuery是危险的),我遇到了一个问题,我的ValidationMessageFor帮手没有在我的部分中显示数据。我读了一堆关于不引人注意的帖子,不过这件事对我来说是不同的,因为我没有嵌入Html.BeginForms或Ajax.BeginForms,所以我不知道deuce是怎么回事,直到我阅读你的文章。再次感谢! +1 – KSwift87 2012-10-22 21:31:40