【发布时间】:2013-02-12 05:48:49
【问题描述】:
尽管我相信我已经定义了所有模型并希望正确传递,但我收到一个错误,指出我在需要另一个模型时传递一个模型。
主视图:
@model Project.Models.ProfileModel
@(ViewBag.HasLocalPassword ? Html.Partial("_ChangePasswordPartial", Model.PasswordModel) : Html.Partial("_SetPasswordPartial", Model.PasswordModel))
@Html.Partial("_UsernamePartial", Model.UsernameModel)
@Html.Partial("_PlayNamePartial", Model.PlayNameModel)
型号:
public class ProfileModel
{
public PasswordModel PasswordModel { get; set; }
public PlayNameModel PlayNameModel { get; set; }
public UsernameModel UsernameModel { get; set; }
}
用户名操作 GET:
public ActionResult _UsernamePartial()
{
var usernameModel = new UsernameModel();
using (var db = new DataContext())
{
usernameModel.Username =
(from u in db.Users where u.ID == WebSecurity.CurrentUserId select u.Username).FirstOrDefault();
}
return PartialView(usernameModel);
}
用户名 POST 操作:
[HttpPost]
public ActionResult _UsernamePartial(UsernameModel usernameModel)
{
if (ModelState.IsValid)
{
using (var db = new DataContext())
{
User user = db.Users.FirstOrDefault(u => u.ID == WebSecurity.CurrentUserId);
user.Username = usernameModel.Username;
db.SaveChanges();
}
}
return View("_UsernamePartial");
}
个人资料操作:
public ActionResult Profile(ManageMessageId? message)
{
var profile = New ProfileModel();
ViewBag.StatusMessage =
message == ManageMessageId.ChangePasswordSuccess ? "Your password has been changed."
: message == ManageMessageId.SetPasswordSuccess ? "Your password has been set."
: message == ManageMessageId.RemoveLoginSuccess ? "The external login was removed."
: "";
ViewBag.HasLocalPassword = OAuthWebSecurity.HasLocalAccount(WebSecurity.GetUserId(User.Identity.Name));
ViewBag.ReturnUrl = Url.Action("Profile");
return View(profile);
}
查看用户名的页面:
@model Acatar.Models.UsernameModel
@using (Html.BeginForm("_UsernamePartial", "Account")) {
<p id="legend">Username</p>
@Html.TextBoxFor(m=>m.Username)
<button type="submit" value=" Username">Save</button>
}
错误信息:The model item passed into the dictionary is of type 'Project.Models.ProfileModel', but this dictionary requires a model item of type 'Project.Models.UsernameModel'.
非常感谢任何关于我哪里出错的帮助。
【问题讨论】:
-
到哪个视图页面,您实际上会看到该错误?
-
@bot 在主视图页面上 - 我拥有的第一部分代码。我是否应该将三个模型的所有 GETS 传递到 Profile 页面中的一个 GET 方法中?
-
@BB987,不,您不必将所有获取发布到同一页面。有趣的是,您有一个从未使用过的 _UsernamePartial 子方法。与您的问题无关,但很有趣
-
OIC,@BB987,您无意中创建了子操作方法。你用你的局部命名你的动作方法。您的意图是(按照惯例)向他们发帖。但他们实际上试图归还 Partials。
-
@DaveA 我对此的总体问题是,在我用文本框加载我的页面之前,但我希望它们预先填充以前保存的数据,但它没有这样做,因为它正在获取一个空引用,所以什么都没有显示。但是在检查数据库更改后它可以正确保存。
标签: asp.net view asp.net-mvc-4 viewmodel asp.net-mvc-viewmodel