Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 在单个视图中传递多个视图模型_Asp.net_View_Asp.net Mvc 4_Viewmodel_Asp.net Mvc Viewmodel - Fatal编程技术网

Asp.net 在单个视图中传递多个视图模型

Asp.net 在单个视图中传递多个视图模型,asp.net,view,asp.net-mvc-4,viewmodel,asp.net-mvc-viewmodel,Asp.net,View,Asp.net Mvc 4,Viewmodel,Asp.net Mvc Viewmodel,尽管我相信我已经定义了所有的模型,并且希望能够正确地传入,但是我得到了一个错误,它表明我传入了一个模型,而它需要另一个模型 主要观点: @model Project.Models.ProfileModel @(ViewBag.HasLocalPassword ? Html.Partial("_ChangePasswordPartial", Model.PasswordModel) : Html.Partial("_SetPasswordPartial", Model.PasswordMode

尽管我相信我已经定义了所有的模型,并且希望能够正确地传入,但是我得到了一个错误,它表明我传入了一个模型,而它需要另一个模型

主要观点:

@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; }
}
用户名操作获取:

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);
    }
用户名后操作:

[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>
}
@model Acatar.Models.UsernameModel
@使用(Html.BeginForm(“\u usernameportial”,“Account”)){
用户名

@Html.TextBoxFor(m=>m.Username) 拯救 }
错误消息:
传递到字典中的模型项类型为“Project.Models.ProfileModel”,但此字典需要类型为“Project.Models.UsernameModel”的模型项。


如果你能告诉我哪里出了问题,我将不胜感激

当您发布到
\u usernameportial
时,它充当返回另一部分的子操作方法。你要回去了

您实际上是在传回视图_usernameportial,但返回它

return View("_UsernamePartial");

当您发布到
\u usernameportial
时,如果没有usernameModel

,这将充当返回另一部分的子操作方法。你要回去了

您实际上是在传回视图_usernameportial,但返回它

return View("_UsernamePartial");


如果调用Html.Partial,没有usernameModel,我不相信它会调用action方法。您应该使用Html.RenderAction()调用控制器操作。

如果您调用Html.Partial,我不相信它会调用操作方法。您应该使用Html.RenderAction()来调用控制器操作。

在主视图页上的@bot中,您实际看到了哪个视图页的错误?这是我的第一段代码。我是否应该在配置文件页面中将三个模型的所有GET传递到一个GET方法中?@BB987,不,您不必将所有GET都发布到同一页面。有趣的是,您有一个从未使用过的UsernamePartial的子方法。与您的问题无关,但有趣的是,@BB987,您无意中创建了子操作方法。您可以用partials命名操作方法。你的意图是(通过表面上的惯例)向他们发帖。但它们实际上试图返回部分。@DaveA我的总体问题是,在使用textbox进行页面加载之前,我希望用以前保存的数据对它们进行预填充,但它没有这样做,因为它得到了一个空引用,所以没有显示任何内容。但在检查数据库中的更改后,它已正确保存。您实际在哪个视图页上看到了该错误?@bot在主视图页上-这是我的第一段代码。我是否应该在配置文件页面中将三个模型的所有GET传递到一个GET方法中?@BB987,不,您不必将所有GET都发布到同一页面。有趣的是,您有一个从未使用过的UsernamePartial的子方法。与您的问题无关,但有趣的是,@BB987,您无意中创建了子操作方法。您可以用partials命名操作方法。你的意图是(通过表面上的惯例)向他们发帖。但它们实际上试图返回部分。@DaveA我的总体问题是,在使用textbox进行页面加载之前,我希望用以前保存的数据对它们进行预填充,但它没有这样做,因为它得到了一个空引用,所以没有显示任何内容。但在检查了数据库中的更改后,它被正确地保存了下来。我认为@BB987无意在子操作中使用他的partials。我可能错了,但我认为他的意图是让呈现的表单发布到以相应视图命名的动作中。这将是初学者对传统的误解。我想…好吧,我说对了-我将在概要文件(主视图)中使用Html.RenderAction()?这不会解决所有问题。除非表单返回usernameModel,否则不应将表单发布到_UsernamePartial。该方法将“绑定”到您的分部,并将尝试渲染它。但您的分部需要usernameModel类型的模型。@DaveA。哇!我刚刚注释了我的post方法并运行了该页面,现在它可以完美地工作了。但是,如果用户更改了
username
并进行了保存,我是否仍然需要该帖子才能保存到数据库中?还是这样做了differently@BB987是的,您应该发布,但是对于父视图Methodos,永远不要发布到以分部命名的方法,除非您想使用该方法调用分部。阅读我的答案下面的链接。它解释了你的动作和部分动作之间的联系。这说明了Paul告诉你的。我不认为@BB987打算在儿童行为中使用他的partials。我可能错了,但我认为他的意图是让呈现的表单发布到以相应视图命名的动作中。这将是初学者对传统的误解。我想…好吧,我说对了-我将在概要文件(主视图)中使用Html.RenderAction()?这不会解决所有问题。除非表单返回usernameModel,否则不应将表单发布到_UsernamePartial。该方法将“绑定”到您的分部,并将尝试渲染它。但您的分部需要usernameModel类型的模型。@DaveA。哇!我刚刚注释了我的post方法并运行了该页面,现在它可以完美地工作了。但是,如果用户更改了
username
并进行了保存,我是否仍然需要该帖子才能保存到数据库中?还是这样做了differently@BB987是的,您应该发布,但是对于父视图Methodos,永远不要发布到以分部命名的方法,除非您想使用该方法调用分部。阅读我的答案下面的链接。它解释了你的动作和部分动作之间的联系。这说明了Paul wa