Asp.net mvc 2 在何处以及如何加载母版页中使用的下拉列表
我是MVC新手 我试图在一个PartialView中使用两个下拉列表(城市、类别),这将在MasterPage中使用,这意味着它们将一直可见 我试图将它们加载到HomeCOntroller中,但没有成功。我有个例外 我读过一些关于制作一个baseController的文章,其他的控制器将从中继承,我已经尝试过了,但我猜我做错了什么 这是我今天得到的唯一代码: 母版页Asp.net mvc 2 在何处以及如何加载母版页中使用的下拉列表,asp.net-mvc-2,Asp.net Mvc 2,我是MVC新手 我试图在一个PartialView中使用两个下拉列表(城市、类别),这将在MasterPage中使用,这意味着它们将一直可见 我试图将它们加载到HomeCOntroller中,但没有成功。我有个例外 我读过一些关于制作一个baseController的文章,其他的控制器将从中继承,我已经尝试过了,但我猜我做错了什么 这是我今天得到的唯一代码: 母版页 <% Html.RenderPartial("SearchForm"); %> PartialView(Sear
<% Html.RenderPartial("SearchForm"); %>
PartialView(SearchForm.ascx)
//不知道为什么我需要两个触发器,如果我没有这个,另一个窗体将根本不会触发!奇怪的
两个问题:
希望任何人都能帮助我 听起来您只是在为单个操作结果设置属性。必须为每个需要使用模型的视图填充模型.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的构造函数中设置值