2

以下を使用して部分ビューを呼び出すビューがあります。

Html.RenderPartial

ページ全体を更新する必要があるのを止めるためにコントローラメソッドを使用してこれを単独で呼び出したいのですが、void を返すコントローラメソッドは既存のビューを破壊するようです (空白の画面が表示されます)。

HTML ドキュメント セクションを更新するための JavaScript コードがありますが、ビューを保持する方法やコントローラーでビューへの参照を取得して JavaScript メソッドを呼び出す方法がわかりません。

私は、この MVC3 のことについてはかなり新しいことを付け加えておきます。

簡単に言うと、JQuery の使用はオプションではないため、残念ながら Javascript に制限されています。

4

2 に答える 2

5

基本的なパターンは、コントローラーで PartialView の結果を作成し、その結果を使用してページ上のコンテナーの innerHTML を更新することです。

HTML

<input type="button" onclick="UpdateMyContainer();" value="Update" />

<div id="MyContainer">
    @Html.Partial( "_MyPartialView", Model )
</div>

JavaScript

JQuery を必要としない Ajax メソッドの作成については、初心者向けの jQuery を使用しない Ajax に従ってください。基本的に:

function UpdateMyContainer() {
  var xmlHttp = createXMLHttp();
  // set your controller URL here:
  xmlHttp.open('get', 'Url/To/SomeMethodInController', true);
  xmlHttp.send(null);
  xmlHttp.onreadystatechange = function() {
    if (xmlHttp.readyState === 4) {
      if (xmlHttp.status === 200) {
        // Set the Id of the container to update here:
        document.getElementById('MyContainer').innerHTML = xmlHttp.responseText;
      } else {
        alert('Error: ' + xmlHttp.responseText);
      }
    } else {
      //still loading
    }
  };
}

上記の JS をさらにリファクタリングして、更新する要素の URL と ID を受け取ることができます。

コントローラ

[HttpPost]
public PartialViewResult SomeMethodInController()
{
    var model = MethodToRetreiveModel();

    return PartialView( "_MyPartialView", model );
}
于 2012-10-15T16:21:47.383 に答える
0

あとがきとして、私は最終的にこれを IE6 で試してみることにしました (聞かないでください!)。若干の微調整が必​​要でしたが、それ以外は美しく機能します。

var xmlHttp = new ActiveXObject('MSXML2.XMLHttp');

xmlHttp.open('post', 'Url/To/SomeMethodInController', true);
于 2013-03-26T10:58:59.223 に答える