0

この問題は非常に奇妙です。私は 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>

この問題を理解するための助けを得ることができれば、本当に感謝しています。

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 に答える