如何更新MVC3中显示视图的一部分

时间:2012-10-15 16:00:22

标签: c# asp.net-mvc-3 razor internet-explorer-6

我有一个使用以下方法调用局部视图的视图:

Html.RenderPartial

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

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

我应该补充一点,我对这个MVC3事情还不熟悉。

N.B。简而言之,使用JQuery不是一个选项,所以我们不幸地限于Javascript。

2 个答案:

答案 0 :(得分: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 beginners创建一个不需要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 );
}

答案 1 :(得分:0)

就像后记一样,我终于在IE6上尝试了这个(不要问!)。不得不做一些轻微的调整,否则它会很美![/ p>

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

xmlHttp.open('post', 'Url/To/SomeMethodInController', true);