剃刀DropDownList的个别及全部内容 [英] Razor DropDownList for each and all elements

查看:99
本文介绍了剃刀DropDownList的个别及全部内容的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有没有办法用剃刀创建的DropDownList并传递第二个参数作为LINQ的结果,而不是默认的空项目?

最关键的是,我使用累加器功能(功能),所以我不能传递null进去(作为一个问题的答案 - <一个href=\"http://stackoverflow.com/questions/19730673/alternative-for-multiple-if-case-statements\">Alternative多个IF / CASE语句的)

如果DropDownList的不适合我真的AP preciate的替代品。

控制器:

 公众的ActionResult指数(字符串searchFullName,串searchExtension,串searchProject)
        {
            VAR extensionList =新的List&LT;串GT;();
            VAR projectList =新的List&LT;串GT;();            VAR项目=从n个unitofwork.DomainRepository.Get()
                           选择n.Project;
            在unitofwork.DomainRepository.Get从n个变种扩展=()
                             选择n.Extension;            extensionList.AddRange(extensions.Distinct());
            projectList.AddRange(projects.Distinct());            ViewBag.searchproject =新的SelectList(projectList);
            ViewBag.searchExtension =新的SelectList(extensionList);            返回查看(unitofwork.DomainRepository.Filter(N =&GT; n.Name.Contains(searchFullName),N =&GT; n.Extension == searchExtension));
          }

过滤器的方法:

 公共虚拟IEnumerable的&LT; T&GT;过滤器(PARAMS前pression&LT;&Func键LT; T,BOOL&GT;&GT; []过滤器)
        {
            IQueryable的&LT; T&GT;查询= dbSet;            返回filters.Aggregate(查询,(A,B)=&GT; a.Where(B));
        }

查看:

  @using(Html.BeginForm()){
    &所述p为H.;
        名称:@ Html.TextBox(searchFullName)
        扩展名:@ Html.DropDownList(searchExtension,全)&LT; - *想获得一个分机或所有分机*
        项目:@ Html.DropDownList(searchProject,全部)
        &LT;输入类型=提交值=过滤器/&GT;
    &所述; / P&GT; }


解决方案

过滤方法使用需要参数来构建Linq查询的代表。

问题是,DDL被传递null作为结果选择在DDL全部项目。因为LINQ的是越来越空如N所以前pressions的=> n.Name == NULL显然没有奏效。

要对付我用codeMaster的提示与吸烟有关的问题返回null参数:

 返回查看(unitofwork.DomainRepository.Filter(N =&GT; n.Name.Contains(searchFullName),N =&GT;(String.IsNullOrEmpty(searchExtension)|| n.Extension == searchExtension)中,n =&GT;(String.IsNullOrEmpty(searchProject)|| n.Project == searchProject)));

Is there a way to create DropDownList with Razor and pass second parameter as Linq result instead of default empty item?

The key is that I'm using accumulator function ("Function") so I can not pass null into it (as a answer to that question - Alternative for multiple IF/CASE statements)

If DropDownList is not suitable I would really appreciate an alternative.

Controller:

        public ActionResult Index(string searchFullName, string searchExtension, string searchProject)
        {
            var extensionList = new List<string>();
            var projectList = new List<string>();

            var projects = from n in unitofwork.DomainRepository.Get()
                           select n.Project;
            var extensions = from n in unitofwork.DomainRepository.Get()
                             select n.Extension;

            extensionList.AddRange(extensions.Distinct());
            projectList.AddRange(projects.Distinct());

            ViewBag.searchproject = new SelectList(projectList);
            ViewBag.searchExtension = new SelectList(extensionList);

            return View(unitofwork.DomainRepository.Filter(n => n.Name.Contains(searchFullName), n => n.Extension == searchExtension));
          }

"Filter" method:

public virtual IEnumerable<T> Filter(params Expression<Func<T, bool>>[] filters)
        {
            IQueryable<T> query = dbSet;

            return filters.Aggregate(query, (a, b) => a.Where(b));
        }

View:

@using (Html.BeginForm()) {
    <p>
        Name: @Html.TextBox("searchFullName")
        Extension: @Html.DropDownList("searchExtension", "All") <- *would like to get one extension or all extensions*
        Projects: @Html.DropDownList("searchProject","All")
        <input type="submit"    value="Filters" />
    </p> }

解决方案

Filter method uses delegates that need parameter to construct Linq query.

The problem was that DDL was passing null as result for selecting "All" items in DDL. Because of that Linq was getting a null so expressions like n => n.Name == null obviously didn't work.

To deal with null parameters I used CodeMaster's hint from linked question :

return View(unitofwork.DomainRepository.Filter(n => n.Name.Contains(searchFullName), n => (String.IsNullOrEmpty(searchExtension) || n.Extension == searchExtension), n => (String.IsNullOrEmpty(searchProject) || n.Project == searchProject)));

这篇关于剃刀DropDownList的个别及全部内容的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆