0

在 .Net MVC 中,如果我使用 JQuery.get()方法从服务器获取文件,我还需要RenderAction在控制器方法上编写一个来显示其内容吗?示例 JQuery:

function RenderPartialView(view, contentcontainer, maskcontainer, params) {
    $.get(view, params, function (data) {
        $("#" + contentcontainer).html(data);
        $(maskcontainer).unmask();
    });
}

   function displayExpandedView() {
       $('.expand-btn').on('click', function () {
           $(".expanded-view").modal();
           RenderPartialView("../some_dir/SomeView", "expanded-view", "#expanded-view", null);
       })
   }

因此,当我运行 displayExpandedView() 函数时,我想用 SomeView 文件的内容填充一个充当模态的 div。当我目前尝试在我的应用程序中执行此操作时,服务器会返回 404 错误,说找不到文件,即使他认为该文件的路径是正确的。使用这种方法我还需要控制器返回PartialView()吗?我的印象是我不会。

4

2 回答 2

1

您需要了解 RenderPartial 和 RenderAction 是服务器端代码,只要页面交付给客户端,它们就会被实际的 HTML 替换。如果您查看生成页面的源代码,您会看到该行将RenderPartialView("../some_dir/SomeView", "expanded-view", "#expanded-view", null);被替换为从该部分视图呈现的 HTML,这在该函数的上下文中将不是有效的 javascript。即,如果部分审查返回<div>Something</div>,那么该 javascript 函数将变为

function displayExpandedView() {
   $('.expand-btn').on('click', function () {
       $(".expanded-view").modal();
       <div>Something</div>
   })

因此不是有效的javascript。

要从 javascript 中检索视图,您的 Get 应指向操作的 url:

Javascript 向控制器操作发出请求,该操作将检索 HTML:

$.get('@Url.Action("ActionName","ControllerName")', function(response) { 
  //URL could also be a regular relative url, so long as it reaches the controller action, note here agsain Url.Action is a server side action and is replaced by a URL when page is rendered.
  $('.result').html(response);//stuff the HTML returned into some element with class .result
  alert('Load was performed.');
});

行动:

public ViewResult ActionName()
{
   return View("ViewName");
}
于 2013-08-12T17:35:23.250 回答
1

使用这种方法我还需要控制器返回 PartialView() 吗?我的印象是我不会。

是的,你仍然需要你的控制器来返回你的局部视图。请记住,当您使用 ASP.NET 的 Render.PartialView 时,这是在服务器端发生的,因此正在完成所有适当的工作来生成 HTML。但是,当您使用 jQuery 进行调用时,您不能像那样直接从客户端访问 HTML(如果可以,这不是一个好习惯)。相反,您需要调用您的控制器操作(或内容文件)以接收返回的 HTML,然后您可以将其附加到您的 DOM中。

于 2013-08-12T17:31:57.787 回答