我是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局部视图?
提前感谢您的帮助!
答案 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
)