在MVC3中使用JQuery渲染局部视图

在MVC3中使用JQuery渲染局部视图,jquery,ajax,asp.net-mvc,asp.net-mvc-3,partial-views,Jquery,Ajax,Asp.net Mvc,Asp.net Mvc 3,Partial Views,我有一些记录。点击每一条记录后,信息需要显示在手风琴上 这些信息应该是从数据库中动态获取的 到目前为止我所做的是 创建局部视图。假设显示详细信息 单击记录后,我调用jquery方法并在控制器上执行我的方法。控制器返回Json形式的对象(或任何其他东西,开放供任何建议) 现在JQuery方法有了那个(Model)对象,但我如何使用它来 从中呈现我的局部视图 这是一个基本的方法 当您需要提交一些表单并作为结果呈现局部视图时 function GetView(){ if ($('#MyHtmlForm

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

这些信息应该是从数据库中动态获取的

到目前为止我所做的是

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

单击记录后,我调用jquery方法并在控制器上执行我的方法。控制器返回Json形式的对象(或任何其他东西,开放供任何建议)

现在JQuery方法有了那个(Model)对象,但我如何使用它来 从中呈现我的局部视图

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

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
});
}

我有一些记录。单击每个记录时,都会显示信息 需要用手风琴演奏

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

  • 收听锚链接的点击事件,在事件内部,您必须框定url,然后
    $(“#accordion-container-1”)。加载(url)
  • 从您的评论中,我看到您必须将
    orderNo
    操作作为参数传递。因此,您必须将
    orderNo
    设置为id,或者将其附加到某个字符串中(以避免元素中重复id),然后设置锚链接的id

    那么

  • 使用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的评论进行更新

    你的行动方法应该是这样的

    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>
    
    @model TrackingModel
    @Html.DisplayFor(…)
    ...
    

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

    您不认为从一个对象编写整个html来生成html太多了吗。必须有某种方法将此对象作为模型传递给部分对象,它将自己完成所有操作。没错,对于第一个示例,您只需将html准备好
    $('#someConteirner').html(结果)如何显示记录?在某个网格中?@标记我的模型是列表。我循环浏览列表并写入表行。但现在我把它改成了div结构。检查我的答案并给出你的评论让我告诉你我现在在哪里。单击使用jQueryAjax后,我请求我的控制器并以Json格式获取数据(我更喜欢局部视图)。但数据是原始格式的。我需要自己应用所有的html。我还需要为我的div设置内部html。类似于Zach在他的方法中所建议的,您不能更改操作return partial view吗?如果没有,那么您必须尝试jquery模板将JSON转换为html并更新divs。那么,这个方法是否会返回部分视图的模型,然后我只需要使用返回的模型渲染部分视图?你能发布你的操作代码吗?我不太明白你在想什么
    
    @model TrackingModel
    
    <div>
      @Html.DisplayFor(...)
      ...
    </div>