Asp.net mvc 2 在何处以及如何加载母版页中使用的下拉列表

Asp.net mvc 2 在何处以及如何加载母版页中使用的下拉列表,asp.net-mvc-2,Asp.net Mvc 2,我是MVC新手 我试图在一个PartialView中使用两个下拉列表(城市、类别),这将在MasterPage中使用,这意味着它们将一直可见 我试图将它们加载到HomeCOntroller中,但没有成功。我有个例外 我读过一些关于制作一个baseController的文章,其他的控制器将从中继承,我已经尝试过了,但我猜我做错了什么 这是我今天得到的唯一代码: 母版页 <% Html.RenderPartial("SearchForm"); %> PartialView(Sear

我是MVC新手

我试图在一个PartialView中使用两个下拉列表(城市、类别),这将在MasterPage中使用,这意味着它们将一直可见

我试图将它们加载到HomeCOntroller中,但没有成功。我有个例外

我读过一些关于制作一个baseController的文章,其他的控制器将从中继承,我已经尝试过了,但我猜我做错了什么

这是我今天得到的唯一代码:

母版页

<% Html.RenderPartial("SearchForm"); %>

PartialView(SearchForm.ascx)


//不知道为什么我需要两个触发器,如果我没有这个,另一个窗体将根本不会触发!奇怪的
两个问题:

  • 问题是在哪里以及如何加载DropDownLists。我曾尝试将其加载到HomeController中,但当转到另一页时,它会说DDL为空,我得到一个例外
  • 为什么我必须使用两种形式来触发ActionMethod

  • 希望任何人都能帮助我

    听起来您只是在为单个操作结果设置属性。必须为每个需要使用模型的视图填充模型.Cities数据

    一种解决方案是将它的总体迁移到ActionFilter

    public class CityListAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuted(ActionExecutedContext filterContext) {
            var result = filterContext.Result as ViewResult;
            result.ViewData.Model = //populate model
            base.OnActionExecuted(filterContext);
        }
    }
    
    然后将过滤器添加到控制器中

    [CityList]
    public class HomeController : Controller {  
        public ActionResult Index() {
            return View();
        }
    }
    
    至于两张表格的问题,我没有理由认为你需要一张空表格


    查看正在输出的html,并确保其正常。还要检查是否正确生成了动作

    更好的方法是创建类似于
    MasterController
    的内容,并在其上设置动作方法,如下所示:

    [ChildActionOnly]
    public ActionResult SearchForm()
    {
        //Get city data, category data etc., create SearchFormModel
        return PartialView(model);
    }
    
    public class SearchViewModel
    {
        public IList<SelectListItem> Cities { get; set; }
        public IList<SelectListItem> Categories { get; set; }
    }
    
    我建议您创建强类型视图(SearchForms.ascx的类型为
    ViewUserControl
    )。此外,拥有这样的模型可能是个好主意:

    [ChildActionOnly]
    public ActionResult SearchForm()
    {
        //Get city data, category data etc., create SearchFormModel
        return PartialView(model);
    }
    
    public class SearchViewModel
    {
        public IList<SelectListItem> Cities { get; set; }
        public IList<SelectListItem> Categories { get; set; }
    }
    
    公共类SearchViewModel
    {
    公共IList城市{get;set;}
    公共IList类别{get;set;}
    }
    
    并使用这样的助手:预先将原始数据转换为DDL友好的格式


    在任何情况下,您现在都可以使用
    Html.RenderAction()
    而不是
    Html.RenderPartial()
    ,并指定希望从“MasterController”执行“SearchForm”操作。

    嘿,big dave!谢谢你的帮助!如果我使用ActionFilter,我必须将这个actionResult放在每个使用的控制器上,对吗?我读过另一个解决方案,您可以创建一个baseController并在构造函数中加载DDL,并使所有控制器从baseController继承。我试过了,但我不太明白。你觉得大戴夫怎么样?那应该行。只需创建一个从控制器继承的新类(例如BaseController)。然后将控制器(以及需要此操作的任何其他控制器)更改为从BaseController而不是控制器继承。然后,您可以将CityList筛选器应用于BaseController,或者在BaseController的构造函数中设置值