2012-04-20 31 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