27

如何动态加载局部视图?

我的意思是我有这个视图,可以说ListProducts,在那里我选择了一些带有产品等的下拉列表,并从我想要填充部分视图的那些中选择的值,这将在一个不可见的 div 中,但在onchange()事件之后将变得可见并且与来自特定选定项目的数据。

4

6 回答 6

27

将 jQuery 的$.load()与返回部分视图的控制器操作一起使用。
例如:

HTML

<script type="text/javascript">
$(document).ready(function()
{
    $("#yourselect").onchange(function()
    {
        // Home is your controller, Index is your action name
        $("#yourdiv").load("@Url.Action("Index","Home")", { 'id' : '123' }, 
                                        function (response, status, xhr)
        {
            if (status == "error")
            {
                alert("An error occurred while loading the results.");
            }
        });
    });
});
</script>

<div id="yourdiv">
</div>

控制器

public virtual ActionResult Index(string id)
{
    var myModel = GetSomeData();
    return Partial(myModel);
}

看法

@model IEnumerable<YourObjects>

@if (Model == null || Model.Count() == 0)
{
    <p>No results found</p>
}
else
{
    <ul>
    @foreach (YourObjects myobject in Model)
    {
        <li>@myObject.Name</li>
    }
    </ul>
}
于 2012-07-03T14:57:19.993 回答
5

您可以按照以下步骤执行此操作。在您的控制器中,您返回一个局部视图。

    [HttpGet]
    public virtual ActionResult LoadPartialViewDynamically()
    {
        var query = _repository.GetQuery();
        return PartialView("_PartialViewName", query);
    }

然后在视图中你有一个空的 div

<div id="partialgoeshere"></div>

然后使用 jQuery 加载局部视图:

function LoadPartialView() {

    $.get("@Url.Action(MVC.ControllerName.LoadPartialViewDynamically())", { null }, function (data) {

        $("#partialgoeshere").empty();
        $("#partialgoeshere").html(data);

    });

}

希望这可以帮助

于 2012-07-04T02:06:41.203 回答
1

我相信您可以执行类似此示例的操作,只需使用下拉列表中的更改事件即可。这是一个简单的 jQuery 调用,您可以在jQuery网站上找到更多信息。

$("#dropdown").change(function() {

    $("#destination").load("/Products/GetProduct", $(this).val(),
       function(result) {
         // do what you need to do

       });
});

第一个参数是您需要调用以获取详细信息的视图。

第二个参数是选择的值。

$.load函数的第三个参数是回调函数,你可以在其中解析结果并做你需要做的事情。

如果您有一个多重选择$(this).val(),它将为您提供一个包含所选选项的数组。

如果您只想返回一个 Json 对象,您可能需要遵循此示例

于 2012-07-03T14:56:39.707 回答
0

您可以使用 ajax 调用操作,然后只需使用 jQuery 将 html 字符串插入您希望它出现的页面:

服务器端:

将部分视图 呈现为字符串 将服务器上的部分视图呈现为 html 字符串,当您需要通过 AJAX 将部分视图添加到 ASP.NET MVC 页面时很有用。

客户端:

$('#yourDdl').change(function()
{
  $.get('/InsertPartialViewUsingAjax', function (data) 
  {
     $('#container').html(data);
  });
});
于 2012-07-03T14:52:55.527 回答
0

使用 Ajax :)

http://api.jquery.com/jQuery.ajax/

例子:

$.post(window.gRootPath + "Customer/PartialView", { Question: questionId})
.done(function (data) {
    $('#partialDiv').html(data.responceText);
});
于 2012-07-03T14:52:43.860 回答
0

下面的文章告诉你如何用最少的 javascript 来做到这一点。基本上,您将 html 而不是 JSON 返回到您的响应对象。

https://www.simple-talk.com/content/article.aspx?article=2118

于 2015-10-06T20:50:32.023 回答