【问题标题】:Render Partial Views using JQuery in MVC3在 MVC3 中使用 JQuery 渲染局部视图
【发布时间】:2012-07-14 20:29:09
【问题描述】:

我有一些记录。点击每条记录后,信息需要显示在手风琴中。

该信息应该从数据库中动态获取。

到目前为止我所做的是

创建局部视图。假设显示详细信息。

点击记录后,我调用 jquery 方法并在控制器上执行我的方法。控制器以 Json 的形式返回对象(或任何其他东西,欢迎提出任何建议)。

现在 JQuery 方法有那个(模型)对象,但我怎么能用它来 从中呈现我的部分视图。

【问题讨论】:

  • 你是如何显示记录的?在某个网格中?
  • @Mark 我的模型是 List。我遍历列表并编写表格行。但现在我把它改成了 div 结构。
  • 查看我的答案并发表评论

标签: jquery ajax asp.net-mvc asp.net-mvc-3 partial-views


【解决方案1】:

我有一些记录。单击每条记录后,会出现信息 需要在手风琴中显示。

有两种方法可以实现您的愿望。我想您必须从提供有关记录的详细信息的操作中返回部分视图。

  1. 监听锚链接的点击事件,在事件内部你必须框住url,然后$("#accordion-container-1").load(url)

例如。

从您的评论中,我看到您必须将 orderNo 操作作为参数传递。因此,您必须将 orderNo 设置为 id 或将其附加到某个字符串(以避免元素中重复的 id)并设置为锚链接的 id。

那么,

$(function(){

  $("a.somecssclass").click(function(){

     var orderNo = this.id;

     var url = "/ControllerName/Tracking?orderNo=" + orderNo;

     // this will call the action through ajax and update the container with the
     // partial view's html.
     $("#divToLoadTheHtml").load(url); 
  });   
});
  1. 使用 MVC 支持的 ajax 操作链接。您可以使用Ajax.ActionLink 创建一个操作链接,该链接通过 ajax 调用一些控制器操作并将 html 结果更新到容器。

例如。

在这种情况下,当您通过循环集合生成记录时,您必须通过 Ajax.ActionLink 方法创建链接(单击时必须通过 ajax 加载内容),并且您还必须包含 jquery'unobtrusive.ajax.js 库。

@foreach(var m in Collection)
{
    .. other stuff

    @Ajax.ActionLink(link name, "Action", new { orderNo = m.something? }, 
    new AjaxOptions
    { 
        UpdateTargetId = "somediv" // set the div name where you want to load the partial view
    });
}

根据 OP 的评论更新

你的action方法应该是这样的,

public PartialViewResult Tracking(int orderNo) 
{ 
     var manager = new OrderManager(); 
     return PartialView(manager.Tracking(orderNo));
}

您应该有一个名称为 Tracking.cshtml 的局部视图,并且在局部视图中您必须创建代表您正在讨论的记录的详细信息的 html。

Tracking.cshtml

@model TrackingModel

<div>
  @Html.DisplayFor(...)
  ...
</div>

当您从 jquery 或通过 ajax 操作(如前所述)调用操作 Tracking 时,您将获得部分视图 html,您可以将其加载到 div 等特定容器中。

【讨论】:

  • 让我告诉你我现在在哪里。单击使用 Jquery Ajax 后,我请求我的控制器并以 Json 格式获取数据(我更喜欢部分视图)。但是数据是原始格式的。我需要自己应用所有的html。而且我还需要为我的 div 设置内部 html。
  • 类似于 Zach 在他的方法中提出的建议
  • 不能改变action返回局部视图吗?如果没有,那么您必须尝试使用​​ jquery 模板将 JSON 转换为 html 并更新 div。
  • 是的,我可以轻松地将我的操作的返回类型更改为部分视图。那么这个方法是否会返回我的局部模型,然后我只需要使用返回的模型渲染局部视图?
  • 您可以发布您的操作代码吗?我不太明白你在尝试什么
【解决方案2】:

这是一个基本的方法 当您需要提交一些表单并将部分视图呈现为结果时

function GetView(){
if ($('#MyHtmlForm').valid()){
    $.ajax(
    {
      type: "POST",
      url: $('#MyHtmlForm').attr("action"), 
      data: $('#MyHtmlForm').serialize(),
      success: function(result) {
        //Render the partial view
        }
      },
      error: function(req, status, err) {
        //handle the error
      }
    });
}

}

这是通过json格式获取行的基本细节,所以使用javascritp生成html

function GetSomeData() {
var cod = $('.row').val();
$.getJSON('@Url.action("ActionName","Controller")', { cod: cod }, function (result) {
    //Render data
});

}

【讨论】:

  • 你不觉得从一个对象写整个 html 来生成 html 太多了。必须有某种方法将此对象作为模型传递给部分对象,它会自行完成所有工作。
  • 没错,因为这种情况是第一个例子,你准备好html到$('#someConteirner').html(result);
猜你喜欢
  • 2012-07-13
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-06
  • 2011-04-08
  • 1970-01-01
  • 2012-01-09
相关资源
最近更新 更多