为什么我不能解析我的MVC局部视图返回的html结果?

时间:2014-11-21 15:59:02

标签: jquery html razor model-view-controller asp.net-mvc-partialview

我知道将MVC部分视图作为html返回的目的只是神奇地加载视图模型中的所有内容传递到我的剃刀模板视图中。

但是,我只想从我的ajax调用中选择性地将html模型数据加载到我的视图中。我找到了解析这些东西的零文档,除了是一个片段,据说可以使用jquery将未格式化的html解析成可查询的东西:

 var modelHTML = $.parseHTML(viewModelData);

我想更进一步,做到:

 var elements = $('<div></div>');
 elements.html(modelHTML);
 var matchingOption = $(elements).find("#selectListID option:first");
 alert(matchingOption.val);

但这会带来一堆乱七八糟的东西。有没有办法解析从带有viewmodel的局部视图结果返回的html,而不是返回json结果?

这是我的控制器代码的要点:

  public ActionResult _MyPartialView(_PartialViewModel pvm)
    {
         _PartialViewModel _pvm = pvm;

         _pvm.shapesList = new List<SelectListItem>();

          foreach(var item in context.shapesEntity.Where(x => x.shapeName.HasValue))
          {
               _pvm.ShapesList.Add(new SelectListItem { Value = item.id, Text = item.name});
          }

          return PartialView("_myPartialView", _pvm);
     }

注意::我已成功将部分视图中的HTML替换为此div中的html。这样可行并且是我看到人们使用部分视图html结果的方式。但我想用jquery查询这个并使用结果片段。

1 个答案:

答案 0 :(得分:1)

试试这个,我想我知道问题所在。

首先是这一行。

var modelHTML = $.parseHTML(viewModelData);

您不需要使用parseHTML(我怀疑它会受到伤害),因为您的操作的返回值已经是HTML,您可以在设置div的HTML时使用它。

var elements = $('<div></div>');
elements.html(modelHTML);
var matchingOption = $(elements).find("#selectListID option:first");

以上所有内容看起来都很好,应该完全符合您的要求(假设您的操作中的HTML有一个名为selectListID的ID,并且它有一个选项)。

我认为下面的行是你有错的地方。

alert(matchingOption.val);

val是一个函数,因此您将获得返回的函数定义。你想要的是这样的。

console.log(matchingOption.val());

你当然可以使用alert,我更喜欢console.log,你也可以使用console.log(matchingOption)将对象吐出到你的控制台。