ASP.net MVC4:在局部视图使用不同的模式? [英] ASP.net MVC4: Using a different model in a partial view?
问题描述
我刚学ASP.net MVC所以请容忍我,如果我在解释我的问题不好。
I am just learning ASP.net MVC so please bear with me if I am bad at explaining my issue.
是否有可能在比什么是被继承视图中的局部视图使用不同的模型?
Is it possible to use a different model in a partial view than what is being inherited in the view?
我的看法首页
目前继承 LoginModel
,它与用户的授权交易。一旦用户被授权,我想在首页
显示的待办事项列表
的用户。 待办事项
通过LINQ检索。
My view Index
currently inherits LoginModel
, which deals with the authorization of users. Once a user is authorized, I want the Index
to display the list of todos
the user has. todos
are retrieved via LINQ.
所以,我的局部视图要继承 System.Web.Mvc.ViewPage<&IEnumerable的LT; todo_moble_oauth.Models.todo>>
,但我得到一个错误,当我使用这样的:'传递到字典中的模型产品类型
So my partial view wants to inherit System.Web.Mvc.ViewPage<IEnumerable<todo_moble_oauth.Models.todo>>
, but I get an error when I use this: `The model item passed into the dictionary is of type
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
指数()
方法:
[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();
}
任何帮助是极大AP preciated,谢谢。
Any help is greatly appreciated, thanks.
推荐答案
当然,你可以做到这一点:
Sure you can do that:
<% Html.Partial("_ListTodos", userTodos); %>
通过 userTodos
作为参数传递给偏帮手。
Pass the userTodos
as a parameter to the Partial helper.
你得到的错误是因为你返回待办事项列表索引页/视图与返回查看(待办事项);
的<$ C内$ C>首页操作方法。索引页需要 LoginModel
对象而不是TODO对象的的IEnumerable
。
The error you're getting is because you're returning a list of todos to the Index page/view with return View(todos);
inside the Index
action method. The Index page needs a LoginModel
object instead of an IEnumerable
of todo objects.
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage<todo_moble_oauth.Models.LoginModel>" %>
要解决这个问题,你需要改变的方式你传递了待办事项
虽然。由于您的首页
页收到 LoginModel
,您可以添加托多斯
属性,这个类是这样的:
To solve this, you need to change the way you're passing the todos
though. Since your Index
page receives a LoginModel
, you can add a Todos
property to this class like this:
[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; }
然后,修改您的索引操作方法:
and then, modify your Index action method:
[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();
}
在视图中,做到这一点:
In the view, do this:
<% Html.Partial("_ListTodos", Model.Todos); %>
这篇关于ASP.net MVC4:在局部视图使用不同的模式?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!