ASP.net MVC4:在局部视图中使用不同的模型?
我只是在学习ASP.NETMVC,所以如果我不善于解释我的问题,请容忍我 是否可以在局部视图中使用与视图中继承的模型不同的模型 我的视图ASP.net MVC4:在局部视图中使用不同的模型?,asp.net,asp.net-mvc,asp.net-mvc-4,model,asp.net-mvc-partialview,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Model,Asp.net Mvc Partialview,我只是在学习ASP.NETMVC,所以如果我不善于解释我的问题,请容忍我 是否可以在局部视图中使用与视图中继承的模型不同的模型 我的视图Index当前继承了LoginModel,它处理用户的授权。一旦用户获得授权,我希望索引显示用户拥有的待办事项列表待办事项通过LINQ检索 因此,我的局部视图希望继承System.Web.Mvc.ViewPage,但在使用该视图时,我得到一个错误:`传递到字典中的模型项的类型为 System.Data.Linq.DataQuery`1[todo_moble_oa
Index
当前继承了LoginModel
,它处理用户的授权。一旦用户获得授权,我希望索引
显示用户拥有的待办事项列表<代码>待办事项
通过LINQ检索
因此,我的局部视图希望继承System.Web.Mvc.ViewPage
,但在使用该视图时,我得到一个错误:`传递到字典中的模型项的类型为
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>
我的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); %>
要解决这个问题,您需要改变传递
todo
的方式。由于您的索引
页面接收到一个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; }
在视图中,执行以下操作:
<% Html.Partial("_ListTodos", Model.Todos); %>
非常感谢,这也是一个很好的详细解决方案。我不得不将
切换到
以使其工作,但现在一切都是黄金,谢谢!我有一个类似的情况,但我的模型结构有点不同,不需要修改,因为我只需要创建一个新的模型实例。出于我的需要,我使用了这行代码(Razor语法):@Html.Partial(“dialogs/_Partial-view”,new MyObjectModel())
[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); %>