ASP.net MVC4:在局部视图中使用不同的模型?
我只是在学习ASP.net MVC,所以如果我不善于解释我的问题,请耐心等待.
是否可以在局部视图中使用与视图中继承的模型不同的模型? 我的观点Index目前继承了LoginModel,它处理用户的授权.一旦用户被授权,我希望索引显示用户拥有的待办事项列表.通过LINQ检索待办事项. 所以我的部分视图想要继承System.Web.Mvc.ViewPage< IEnumerable< todo_moble_oauth.Models.todo>>,但是当我使用它时出现错误:`传入字典的模型项是类型的 System.Data.Linq.DataQuery`1[todo_moble_oauth.Models.todo]',but this dictionary requires a model item of type 'todo_moble_oauth.Models.LoginModel' 这是我的索引视图 <%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<todo_moble_oauth.Models.LoginModel>" %> <section id="loginForm"> <% if (Request.IsAuthenticated) { %> <% Html.RenderPartial("_ListTodos"); %> <% } else { %> <h1>Todo Mobile</h1> <blockquote>Easily store your list of todos using this simple mobile application</blockquote> <% using (Html.BeginForm()) { %> <%: Html.AntiForgeryToken() %> <%: Html.ValidationSummary(true) %> <%: Html.LabelFor(m => m.UserName) %> <p class="validation"><%: Html.ValidationMessageFor(m => m.UserName) %></p> <%: Html.TextBoxFor(m => m.UserName) %> <%: Html.LabelFor(m => m.Password) %> <p class="validation"><%: Html.ValidationMessageFor(m => m.Password) %></p> <%: Html.PasswordFor(m => m.Password) %> <label class="checkbox" for="RememberMe"> <%: Html.CheckBoxFor(m => m.RememberMe) %> Remember Me? </label> <input type="submit" value="Login" /> <% } %> <% } %> </section> 我的部分视图_ListTodos如下: <%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<IEnumerable<todo_moble_oauth.Models.todo>>" %> <% foreach (var item in Model) { %> <%: Html.DisplayFor(modelItem => item.title) %> <%: Html.DisplayFor(modelItem => item.description) %> <% } %> 我的LoginModel具有以下内容: public class LoginModel { [Required] [Display(Name = "User name")] public string UserName { get; set; } [Required] [DataType(DataType.Password)] [Display(Name = "Password")] public string Password { get; set; } [Display(Name = "Remember me?")] public bool RememberMe { get; set; } } HomeController Index()方法: [AllowAnonymous] public ActionResult Index() { // if user is logged in,show todo list if (Request.IsAuthenticated) { //var currentUser = Membership.GetUser().ProviderUserKey; todosDataContext objLinq = new todosDataContext(); var todos = objLinq.todos.Select(x => x); return View(todos); } return View(); } 非常感谢任何帮助,谢谢. 解决方法
当然你可以这样做:
<% Html.Partial("_ListTodos",userTodos); %> 将userTodos作为参数传递给Partial helper. 你得到的错误是因为你将一个todos列表返回到Index页面/视图,返回View(todos);在Index动作方法中. Index页面需要一个LoginModel对象而不是IEnumerable的todo对象. <%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<todo_moble_oauth.Models.LoginModel>" %> 要解决这个问题,你需要改变传递todos的方式.由于您的索引页面收到LoginModel,您可以像这样向这个类添加Todos属性: [Required] [Display(Name = "User name")] public string UserName { get; set; } [Required] [DataType(DataType.Password)] [Display(Name = "Password")] public string Password { get; set; } [Display(Name = "Remember me?")] public bool RememberMe { get; set; } public IEnumerable<todo_moble_oauth.Models.todo> Todos { get; set; } 然后,修改您的索引操作方法: [AllowAnonymous] public ActionResult Index() { // if user is logged in,show todo list if (Request.IsAuthenticated) { //var currentUser = Membership.GetUser().ProviderUserKey; todosDataContext objLinq = new todosDataContext(); var todos = objLinq.todos.Select(x => x); LoginModel model = new LoginModel(); model.Todos = todos; return View(model); } return View(); } 在视图中,执行以下操作: <% Html.Partial("_ListTodos",Model.Todos); %> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 将asp mvc3不显眼验证与jquery验证插件混合使用
- asp.net-mvc-3 – 如何在ASP MVC3中创建可重用的导航菜单?
- asp.net-mvc – 运行时错误没有为扩展名’.cshtml’注册的构
- ASP.NET从.aspx链接返回图片
- 适用于ASP.NET的SaaS入门套件,涵盖订阅,计费等
- asp.net-mvc – MVC – 如何更改帖子中文本框的值?
- asp.net – HTML敏捷包删除break标签关闭
- asp.net – 将DetailsView行组合在一起?
- asp.net-mvc – Html.Actionlink作为Button效果
- 非锁定进程中的ASP.NET会话状态存储