2017-10-14 117 views
0

我正在处理web应用程序项目,我试图包括使用ajax搜索。ASP.NET MVC 5 - ajax.beginform()与空参数

我使用ajax.beginform()创建了一个搜索表单,并且我有一个小问题: 当我的文本框为空,并且单击搜索时,我希望视图返回所有实体(例如不发生搜索) ,但它返回空视图。 我试图检查控制器,如果字符串为空,但没有成功。

1.当文本字段为空时参数获得什么值?

2.如何发送几个参数?

预先感谢您!

特拉维夫

.cshtml - 查看

@using (Ajax.BeginForm("BranchSearch", "Branches", 
     new AjaxOptions { HttpMethod = "POST", InsertionMode = InsertionMode.Replace, UpdateTargetId = "searchResults" })) 
{ 
    <h3>Search:</h3> 
    <p>Branch name :</p>@Html.TextBox("Search", null, new { id = branchname"}) 
    <input type="submit" value="Search" class="btn btn-primary" /> 
} 

的.cs - 控制器

public PartialViewResult BranchSearch(String branchname, String country) 
{ 
    List<Branches> model = (from p in db.Branches 
         select p).ToList(); 

    if(branchname!=null) 
     { 
     model = model.Where(x => x.BranchName.Equals(branchname)).ToList(); 
     } 

     return PartialView("BranchSearch",model); 
}  
+0

哪里是从哪里来的“国家”参数... ?? –

回答

2

当用户不输入搜索框中输入任何内容,并提交表单,该脚本将发送一个空字符串。所以你应该检查空字符串或空字符串。

if (!string.IsNullOrEmpty(branchname)) 
{ 
    model = model.Where(x => x.Branchname.Equals(branchname)).ToList(); 
} 

而且动作方法的参数名称应与你的输入元素名称。

@Html.TextBox("branchname") 

而且,你不需要你Where条款之前调用ToList()。你可以在最后调用它,那时LINQ查询表达式将被评估,并且会给你筛选结果。如果要使用不区分大小写的搜索,请使用Equals方法过载中的一个不区分大小写的StringComparison枚举值。

public PartialViewResult BranchSearch(String branchname, String country) 
{ 
    IQueryable<Branch> model = db.Branches; 
    if (!string.IsNullOrEmpty(branchname)) 
    { 
     model = model.Where(x => x.BranchName.Equals(branchname 
             ,StringComparison.OrdinalIgnoreCase)); 
    } 
    // Now we are ready to query the db and get results. Call ToList() 
    var result = model.ToList(); 
    return PartialView("BranchSearch", result); 
} 

如果要执行多个过滤器,添加一个Where子句在model你打电话ToList()(同我们所做的分支名称)之前

+1

非常感谢!它的工作:) –

+0

** @ Html.TextBoxFor(m => m.BranchName,new {@class =“form-control”})**会更受欢迎,因为它会创建一个名称和ID为Branchname并且在提交之前也会触发任何相关验证 –