我的情况是我希望部分视图显示下拉列表中的每个字段。我将从不同的数据库中获取列表,例如,一个来自类别,城市等。这将帮助用户更轻松地使用搜索。我已经从数据库中成功获取列表并将其显示为下拉列表,但是我无法将这些选定的字段值发送到“搜索”模式。
我想了一种通过将名称指向搜索类属性来从下拉列表发送到选定值的方法。 就像我在局部视图中所做的一样。
@Html.DropDownListFor(m => m.Search.City, new SelectList(Model.Cities, "Id", "Name"), "จังหวัด", new { @class = "form-control" })
m.Search.City指向搜索类中的属性City。但由于某种原因,当我选择下拉列表并单击“提交”并查看将null发送到Search类时。
有人知道如何防止此错误,或者有解决此问题的更好方法?任何帮助将不胜感激。谢谢。
我的动作将如下所示
[ChildActionOnly]
public ActionResult SearchBox()
{
var categories = db.Categories.ToList();
var counties = db.Counties.ToList();
var cities = db.Cities.ToList();
var search = new SearchViewModel
{
Categories = categories,
Counties = counties,
Cities = cities
};
return PartialView("_AdsSearch", search);
}
该操作将返回每个下拉列表的列表,这些列表将显示在SearchBox视图上。
我的SearchViewModel看起来像这样
public class SearchViewModel
{
public IEnumerable<Category> Categories { get; set; }
public IEnumerable<County> Counties { get; set; }
public IEnumerable<City> Cities { get; set; }
public Search Search { get; set; }
}
和我使用模型Kaiban.ViewModel.SearchViewModel
的视图Html.BeginForm("SearchAds", "Ads", FormMethod.Post, new { @class = "form-horizontal"}))
<div class="row">
<div class="col-sm-3">
@Html.TextBoxFor(m => m.Search.Location, new { placeholder = "ค้นหาจากทำเล", @class = "form-control", rows = "5" })
@Html.ValidationMessageFor(m => m.Search.Location)
</div>
<div class="col-sm-2">
@Html.DropDownListFor(m => m.Search.Category, new SelectList(Model.Categories, "Id", "Name"), "ประเภท", new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.Search.Category)
</div>
<div class="col-sm-2">
@Html.DropDownListFor(m => m.Search.City, new SelectList(Model.Cities, "Id", "Name"), "จังหวัด", new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.Search.City)
</div>
<div class="col-sm-2">
@Html.DropDownListFor(m => m.Search.County, new SelectList(Model.Counties, "Id", "Name"), "เขตหรืออำเภอ", new { @class = "form-control", @disabled = "disabled"})
@Html.ValidationMessageFor(m => m.Search.County)
</div>
<div class="col-sm-2">
<div style="float: right">
<button type="submit" class="btn-search btn-success">ค้นหา</button>
</div>
</div>
</div>
我的带有http帖子的SearchAds操作,当用户单击提交搜索时,它将使用此操作。
[HttpPost]
public ActionResult SearchAds(Search searchModel)
{
var result = db.Adses.AsQueryable();
if (searchModel != null)
{
if (searchModel.Id.HasValue)
result = result.Where(x => x.Id == searchModel.Id);
if (!string.IsNullOrEmpty(searchModel.Category))
result = result.Include("Category").Where(x => x.Category.Name.Contains(searchModel.Category));
if (!string.IsNullOrEmpty(searchModel.County))
result = result.Include("Category").Where(x => x.County.Name.Contains(searchModel.County));
if (!string.IsNullOrEmpty(searchModel.City))
result = result.Include("Category").Where(x => x.City.Name.Contains(searchModel.City));
}
return View(result);
}
我有一个搜索模式,用于从用户那里获取输入,它看起来像这样,使用NotMapped过滤器,它将不会在数据库中创建。
[NotMapped]
public class Search
{
public int? Id { get; set; }
public string Category { get; set; }
public string City { get; set; }
public string County { get; set; }
public string Location { get; set; }
}