繁体   English   中英

我可以使用什么技术来获取与MVC中渲染的局部视图相关的模型?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM