ASP.NET MVC。部分视图的特定URL

时间:2013-04-15 17:13:54

标签: asp.net-mvc url partial-views

我是ASP.NET MVC的新手。所以我的问题似乎有些天真。无论如何,我花了几个小时搜索有关我的主题的任何信息,但没有结果。所以我非常感谢你的帮助。

所以这是我的问题。

在我的索引视图中,我有一个div,我根据用户点击的链接放置不同部分视图的内容。

这是代码。 Index.cshtml:

<div id="dynamicContent"></div>

<a href="#" onclick="@String.Format("updateContent('{0}');", Url.Action("DynamicContent", "Agent", new {name = "AboutCbsrAgent"}))">About Cbsr Agent</a>

<a href="#" onclick="@String.Format("updateContent('{0}');", Url.Action("DynamicContent", "Agent", new {name = "ApplicationAreasOfCBSR"}))">Application Areas Of CBSR</a>

JavaScript的:

function updateContent(contentUrl) {

    $.ajax({
        url: contentUrl,
        type: "GET",
        success: function (data) {
            $('#dynamicContent').html(data);
        }
    });
}

控制器:

public class AgentController : Controller
{
    //Index action
    public ActionResult DynamicContent(string name)
    {
        return PartialView(String.Format("Partial/" + name));
    }
}

所以,一切正常。当用户单击链接时,相应的部分视图将加载到div中。 问题是在浏览器的adrees栏中我得到以下URL:example.com/Agent#我点击的链接。

所以我的问题:有没有办法为每个局部视图生成唯一的URL?例如:example.com/agent/partial/AboutCbsrAgent。是否可以这样做,当我将此链接粘贴到浏览器的地址栏时,将显示整个视图和NECESSARY局部视图?

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

您可以在AgentController中为两个网址创建两个单独的操作,并传递要渲染的部分视图的名称。类似的东西:

public ActionResult AboutCbsrAgent() 
{
    ViewBag.MyPartialView = "AboutCbsrAgent";
    ....

    return View("Index");
}

然后在Index.cshtml

<div id="dynamicContent">
    @Html.Partial(ViewBag.MyPartialView)
</div>

你可能需要调整路径,但你明白了。

答案 1 :(得分:1)

如果您想避免使用网址中的#

<a href="javascript:void(0);" onclick="@String.Format("updateContent('{0}');", Url.Action("DynamicContent", "Agent", new {name = "AboutCbsrAgent"}))">About Cbsr Agent</a>

如果你知道你的用户主要是FF,Chrome,IE9&lt;,或者你不在乎browser doesn't support 它,你可以使用history.pushState

如果用户重新访问该网址(使用pushState

,您仍需要找到加载正确内容的解决方案