Можем ли мы динамически изменить URL с помощью вызова Ajaxy на странице ASP.NET MVC? - PullRequest
1 голос
/ 04 января 2011

У меня есть приложение 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);
        }

Ответы [ 2 ]

1 голос
/ 04 января 2011

Здесь есть довольно комплексное решение: http://ajaxpatterns.org/Unique_URLs

0 голосов
/ 04 января 2011

Я предполагаю, что вы хотите «изменить URL-адрес», чтобы в браузере работала кнопка «Назад» для навигации по различным продуктам. На самом деле вы не можете изменить URL без обратной передачи, но вы можете изменить значение Hash для URL. Изменяя значение Hash, вы сможете поддерживать браузерную кнопку «Назад» так же, как был изменен сам URL, но без каких-либо обратных ссылок.

В следующем URL:

http://site/page#SomeValue

Значение хеша равно "#SomeValue".

Вы можете установить хэш, используя «document.Hash» в JavaScript.

Чтобы упростить работу со значением «document.Hash» и настроить функцию получения уведомлений об изменениях, я создаю проект jHash .

Возможно, вы захотите взглянуть на jHash, чтобы помочь вам сделать то, что вы ищете.

http://jhash.codeplex.com/

...