Как передать значение ParentNode из JQuery TreeView в метод Controller на странице ASP.NET MVC? - PullRequest
0 голосов
/ 04 января 2011

У меня есть страница ASP.NET MVC, которая покинула Навигацию по меню, которая создается динамически с использованием JQuery TreeView Control.

В этом древовидном представлении есть список ProductNames в качестве ParentУзел (например: 10 товаров).Каждый из этих продуктов имеет ChildNode как DocTypeName (Например: 3 DocTypeNames).

Здесь Когда пользователь нажимает на ParentNode, он раскрывается и отображает DocTypeNames.Когда пользователь нажимает на DocTypeName, он загружает частичное представление, вызывая контроллер ActionResult DocumentDetails через Ajaxy.

Из приведенного ниже кода я могу прочитать выбранное DocTypeName.Но я не могу прочитать ProductName.Там написано «Не определено».

Кто-нибудь знает, как передать родительское ProductName в контроллер?

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);
        alert("ProductName: " + this.ProductName);  //Error throwing here "Undefined"
        $("#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 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>

Метод контроллера:

// 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

Попробуйте добавить это к данным, которые вы отправляете на сервер:

ProductName: $(this).siblings(":hidden").val()

Но вы определенно не должны создавать несколько элементов с одинаковым идентификатором!

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

если Html.Hidden("ProductName", item.Name) отображает скрытое поле с идентификатором ProductName, то на одной странице может быть несколько элементов с одним и тем же идентификатором, и поэтому его поиск может вернуть неопределенное значение.

В противном случае поисковый запрос jQuery будет просто $("#ProductName").val()

...