2

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

所以这是我的问题。

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

这是代码。索引.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 中。问题是,在浏览器的地址栏中,我得到以下 URL:example.com/Agent# 无论我点击什么链接。

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

预先感谢您的帮助!

4

2 回答 2

3

您可以在AgentController, 中为两个 URL 创建两个单独的操作,并传递要呈现的局部视图的名称。就像是:

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

    return View("Index");
}

然后在你的Index.cshtml

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

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

于 2013-04-15T20:02:47.030 回答
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<,或者你不在乎浏览器不支持,你可以使用history.pushState

尽管如果用户重新访问该 url(使用pushState) ,您仍然必须找到加载正确内容的解决方案

于 2013-04-15T20:09:49.937 回答