ASP.NET MVC过滤导致列表/网格

Sla*_*der 10 asp.net-mvc

出于某种原因,我坚持这一点.我需要在同一视图中根据DropDownList过滤View中的结果.基本思路是:我有一个属于各种合作伙伴的提供商列表,但提供商列表包含所有提供商(适用于所有合作伙伴).当有人想要查看该合作伙伴时,我需要能够通过合作伙伴显示提供商(否则,默认列表将是所有提供商).我的观点目前是"默认"(显示全部),但出于某种原因,我坐在这里盯着显示器(过去2小时!)试图弄清楚如何过滤这些结果.

有什么建议从哪里开始/怎么做?!

Jos*_*off 10

编辑:如果你想用jQuery和AJAX(这将提供更好的用户体验,因为只刷新细分列表),请参阅本教程.

如果我理解正确,你基本上想要做一个WebForms风格的回发.

假设您拥有国家和国家/地区细分(例如州,省等)的控制权.当国家/地区发生更改时,您需要显示相应的细分.

所以这将是观点:

<% using (Html.BeginForm()) { %>
    <%=Html.DropDownList("Address.CountryId", new SelectList(Country.GetAll(), "Id", "Name"), new { onchange = "this.form.submit();" })%>
    <%=Html.DropDownList("Address.CountrySubdivisionId", new SelectList(CountrySubDivision.GetByCountryId(Model.CountryId), "Id", "Name"))%>
    <input type="submit" name="btnSubmit" value="Submit"/>
<%} %>
Run Code Online (Sandbox Code Playgroud)

这是获取依赖列表进行过滤的关键:

new { onchange = "this.form.submit();" }
Run Code Online (Sandbox Code Playgroud)

在控制器中,你会有这样的事情:

    [AcceptVerbs(HttpVerbs.Post)]
    public ViewResult Index(string btnSubmit)
    {
        if (btnSubmit == null)
        {
            // return the view displayed upon GET
        }
        else
        {
            // process the submitted data
        }
    }
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,如果通过更改下拉列表中的值来触发表单提交,则btnSubmit将为null.因此,您发布的操作可以判断用户是否打算完成更改.


Joh*_*n M 6

添加早期的答案.

要创建下拉列表(在ASP .NET MVC 3中),我执行了以下操作:

将代码添加到Index.cshtml

@using (Html.BeginForm())
{      
@Html.DropDownList("EmployeeId", (SelectList)ViewData["EmployeeId"])     
 <input type="submit" name="btnSubmit" value="Submit"/> 
}
Run Code Online (Sandbox Code Playgroud)

在默认的ActionResult中为Index()添加代码到YourModelNameController.cs

public ActionResult Index()
{

    //create a selectlist
        var employeeList = from el in db.Employee select el;
        ViewData["EmployeeId"] = new SelectList(employeeList, "EmployeeId", "TmName");

        return View(modelName);
    }
Run Code Online (Sandbox Code Playgroud)