[英]Can I use the model from an MVC partial view in my Knockout viewmodel in the main view?
[英]What technique can I use to get the model associated with a rendered partial view in MVC?
我正在动态构建搜索屏幕,但它带来了一个我不确定如何解决的问题。
为了简单起见,我们假设我有3种实体类型:一个人,一只狗和一辆汽车。 这些在搜索表单的下拉列表中列出,并且根据用户选择的内容,控制器返回相关的局部视图,该局部视图具有特定于所选类型的搜索条件html控件:
User selects 'Dog' from dropdown:
- Dynamically renders a pre-built partial view with search fields: Pet Name, Breed.
User selects 'Person' from dropdown:
- Dynamically renders a pre-built partial view with search fields: Name, Surname
等等
我的数据库中有一个人,狗和汽车表,需要搜索。 我不知道如何:
1)将模型与相关的局部视图相关联(包含特定于实体的字段)
2)从控制器中检索模型,并调用适当的数据库函数。
所以在我看来,我想做些类似的事情:
public ActionResult DoSearch()
{
switch ( theEntityTypeSelected )
{
case EntityType.Person :
{
var personModel someLogic.GetPersonPartialViewModel(); // The model containing the search criteria fields and values
var searchResults = db.Person.Where(x => x.Name == personModel.Name && x.Surname == personModel.Surname);
return View(searchResults);
}
}
}
我必须采取哪些选择措施? 也许有比我上面列举的示例更好的方法?
这是一个如何基于下拉菜单中的选定项目动态渲染局部的示例。
public class SearchViewModel
{
public SearchViewModel()
{
this.SearchObjectTypes = new List<SelectListItem>();
}
public IList<SelectListItem> SearchObjectTypes { get; set; }
}
控制者
public ActionResult Partial()
{
var viewModel = new SearchViewModel();
viewModel.SearchObjectTypes.Add(new SelectListItem { Text = "Please select...", Value = "" });
viewModel.SearchObjectTypes.Add(new SelectListItem { Text = "Dog", Value = "Dog" });
viewModel.SearchObjectTypes.Add(new SelectListItem { Text = "Person", Value = "Person" });
return View(viewModel);
}
public ActionResult GetDogSearchView()
{
if (Request.IsAjaxRequest())
{
return PartialView("_DogSearch");
}
return View("_DogSearch");
}
主搜索视图
@model ModelBindingList.Controllers.SearchViewModel
@{
ViewBag.Title = "Partial";
}
@Html.DropDownList("SearchObjects", Model.SearchObjectTypes)
@using(Html.BeginForm())
{
<div id="SearchFields">
</div>
<input type="submit" value="Search"/>
}
@section scripts{
<script type="text/javascript">
$(function () {
$("#SearchObjects").change(function () {
var searchObjectType = $(this).find(":selected").text();
switch (searchObjectType) {
case "Dog":
$.get('@Url.Action("GetDogSearchView", "Home")', function (data) {
$('#SearchFields').html(data);
});
}
});
});
</script>
}
_DogSearch.cshtml
<input type="text" placeholder="Enter dog breed..."/>
当您从下拉列表中选择一项时,将对部分视图进行GET
请求。 但是,您将遇到的一个问题是如何将搜索字段传递回控制器。
由于您将允许用户搜索狗,人等,因此输入视图模型将需要所有字段(名称,品种等)以及要搜索的对象类型(狗,人)。 我不确定该如何为您正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.