4

こんにちは。

これはMVCに関してはかなり基本的な質問であることは知っていますが、@Html.RenderPartialでエラーが発生しないようにすることはできません。VB.NET と Razor を使用しています。私がオンラインで見つけたほとんどの例は c# で書かれており、変換するのは難しくありませんが、この単純なものには困惑しました。これは私の Index ビューにあり、_Layout.vbhtml によってレンダリングされています。

@Section MixPage
    @Html.RenderPartial("_MixScreen", ViewData.Model)
End Section

上記の式は値を生成しません。

今朝かなり探しましたが、例を挙げているページは次のとおりです。

http://geekswithblogs.net/blachniet/archive/2011/08/03/walkthrough-updating-partial-views-with-unobtrusive-ajax-in-mvc-3.aspx

コントローラー内から部分ビューの HTML を取得する

最終的に、私がやろうとしているのは、モデルをコントローラーから部分ビューに戻し、更新することです。

    Function UpdateFormulation(model As FormulationModel) As ActionResult
        model.GetCalculation()
        Return PartialView("_MixScreen", model)
    End Function

そしてそのコントローラはJavaScriptの式から呼び出されています:

function UpdateResults() {
    jQuery.support.cors = true;
    var theUrl = '/Home/UpdateFormulation/';
    var formulation = getFormulation();
    $.ajax({
        type: "POST",
        url: theUrl,
        contentType: "application/json",
        dataType: "json",
        data: JSON.stringify(formulation),
        success: function (result, textStatus) {
            result = jQuery.parseJSON(result.d);
            if (result.ErrorMessage == null) {
                FillMixScreen(result);
            } else {
                alert(result.ErrorMessage);
            }
        },
        error: function (xhr, result) {
            alert("readyState: " + xhr.readyState + "\nstatus: " + xhr.status);
            alert("responseText: " + xhr.responseText);
        }
    });
}

この更新されたモデルをビューに戻し、この部分的なビューのみを更新するより良い方法があれば、私はすべて耳にします。しかし、この質問の前提は、RenderPartial が値を生成しないのはなぜですか?

4

2 に答える 2

12

Html.RenderPartial は、応答に直接書き込みます。値を返しません。したがって、コード ブロック内で使用する必要があります。

@Section MixPage
    @Code
        @Html.RenderPartial("_MixScreen", ViewData.Model)
    End Code
End Section

Partial() は文字列を返すため、コード ブロックなしで Html.Partial() を使用して同じことを行うこともできます。

@Section MixPage
    @Html.Partial("_MixScreen", ViewData.Model)
End Section
于 2012-12-22T05:26:48.917 に答える
1

さて、クライアントからの問題は、クライアントでhtmlJsonではないことを期待していることです。ビューを返すことを覚えておいてください。基本的htmlに、結果で期待されるデータ型をhtmlに変更するビューコンパイルを返しています

$.ajax({
    type: "POST",
    url: theUrl,
    contentType: "application/json",
    dataType: "html",
    data: JSON.stringify(formulation),
    success: function (result, textStatus) {
        result = jQuery.parseJSON(result.d);
        if (result.ErrorMessage == null) {
            FillMixScreen(result);
        } else {
            alert(result.ErrorMessage);
        }
    },
    error: function (xhr, result) {
        alert("readyState: " + xhr.readyState + "\nstatus: " + xhr.status);
        alert("responseText: " + xhr.responseText);
    }
});

また、メソッドloadを使用することをお勧めします。これは ajax の短いバージョンであり、期待される結果が html であり、必要な要素の本体に追加されることを常に想定しています。

2番。レイアウトから部分的にロードする場合は、次のようにします

 //note's that i'm calling the action no the view
 @Html.Action("UpdateFormulation","yourController", new { model = model}) //<--- this is code in c# don't know how is in vb
于 2012-06-15T15:16:37.773 に答える