2

我有一个视图,它使用以下方法调用部分视图:

Html.RenderPartial

我想使用控制器方法单独调用它以停止必须刷新整个页面,但返回 void 的控制器方法似乎破坏了现有视图(我得到一个空白屏幕)。

我有更新 HTML 文档部分的 javascript 代码,但我看不到如何在控制器中保留视图/获取对它的引用以调用 javascript 方法。

我应该补充一点,我对这个 MVC3 东西还很陌生。

NB 长话短说,使用 JQuery 不是一种选择,所以很遗憾我们仅限于 Javascript。

4

2 回答 2

5

基本模式是在 Controller 中创建 PartialView 结果并使用该结果更新页面上某些容器的 innerHTML:

HTML

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

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

JavaScript

遵循Ajax without jQuery for 初学者来创建不需要 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 回答