У меня есть приложение ASP.NET MVC, у которого есть представление под названием Продукты.
В этом представлении продуктов есть навигация по левому меню, реализованная с использованием частичного представления NavMenuProducts.ascx.Это меню реализовано с использованием JQuery Treeview, так что оно имеет список ProductNames в качестве родительского узла и расширяется (например, 10 продуктов).Каждый из этих продуктов имеет ChildNode как DocTypeName и является гиперссылкой (например, 3 DocTypeNames).
Когда пользователь щелкает гиперссылку ChildNode, все соответствующие документы отображаются и реализуются с помощью вызова Ajaxy.Так что пользователь имеет лучший пользовательский интерфейс.Но проблема в том, что URL-адрес всегда статичен (пример: http://DocShare)
Но на основе щелкающего узла я хочу, чтобы URL-адрес был похож на http://DocShare/Products/Product1/Letter
Мне интересно, как создать этот динамический URL с помощью вызова Ajaxy.
ПРИМЕЧАНИЕ: Если я использую HTML.ActionLINK, то я получаю динамический URL.Но это ActionLink, пока страница загружается, мы получаем случайный древовидный экран.Чтобы избежать этого эффекта мерцающего дерева, я делаю Ajax-вызов для улучшения пользовательского интерфейса.
Для получения динамического URL с помощью Ajaxy было бы полезно любое решение.
Вот код:
NavigationProducts.ascx Страница:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MedInfoDS.Controllers.ProductViewModel>" %>
<script type="text/javascript">
$(document).ready(function () {
$(".docId").click(function () {
alert("DocTypeName: " + this.id);
$("#docDetails").load('<%= Url.Action("DocumentDetails") %>', { ProductName: "darbepoetin alfa", DocTypeName: this.id }, function (responseText, status) {
});
return false;
});
});
<div id="treecontrol">
<a title="Collapse the entire tree below" href="#">Collapse All</a> | <a title="Expand the entire tree below"
href="#">Expand All</a> | <a title="Toggle the tree below, opening closed branches, closing open branches"
href="#">Toggle All</a>
</div>
<div id="divByProduct">
<ul id="red" class="treeview-red">
<% foreach (var item in Model.Products)
{ %>
<li><span>
<%=item.Name%></span>
<ul>
<%foreach (var item1 in Model.DocTypes) { %>
<li><span>
<%= Html.ActionLink(item1.DocTypeName, "Products", new { ProductName = item.Name, DocTypeName = item1.DocTypeName })%>
<br />
<a class="docId" href="#" id="<%=item1.DocTypeName%>"><%= item1.DocTypeName%></a>
<%= Html.Hidden("ProductName", item.Name)%>
</span></li>
<% } %>
</ul>
</li>
<% } %>
</ul>
</div>
Метод контроллера:
// Response to AJAXy call to populate details for given ProductName and DocType
[HttpPost]
public virtual ActionResult DocumentDetails(string ProductName, string DocTypeName)
{
var entities = new MIDSContainer();
if (ProductName == null) return View();
int ProductId = (entities.Products.FirstOrDefault(p => p.Name == ProductName)).ProductId;
int DocTypeId = (entities.DocTypes.FirstOrDefault(d => d.DocTypeName == DocTypeName)).DocTypeId;
var documents = (from d in entities.Documents.Where(p => p.ProductId == ProductId && p.DocTypeId == DocTypeId && p.AvailableForUse == true && p.Status == "Approved") orderby (d.Description) select d).ToList();
return View(documents);
}