C# MVC4多模型绑定

C# MVC4多模型绑定,c#,asp.net-mvc,C#,Asp.net Mvc,我正在开发一个MVC4网站 在我的站点中,我在局部视图中有一个登录表单,我在_layout.cshtml中呈现它,它使用LoginModel 我还有一个联系人表单,它使用ContactModel 当我拿到联系表并提交时,一切都很好。它转到服务器端。在它执行之后,我将返回一个视图并将其绑定到ContactModel 这很简单: [HttpPost] public ActionResult Contact(Contact model) { if (ModelState.IsValid)

我正在开发一个MVC4网站

在我的站点中,我在局部视图中有一个登录表单,我在_layout.cshtml中呈现它,它使用
LoginModel

我还有一个联系人表单,它使用
ContactModel

当我拿到联系表并提交时,一切都很好。它转到服务器端。在它执行之后,我将返回一个视图并将其绑定到
ContactModel

这很简单:

[HttpPost]
public ActionResult Contact(Contact model)
{
    if (ModelState.IsValid)
    {
        //somecode here
    }

    return View(model);
}
它变得越来越复杂,MVC试图将
ContactModel
绑定到登录页面,并给出以下错误

传递到字典中的模型项的类型为 “My_Project.Model.ContactModel”,但此词典需要一个模型 类型为“My_Project.Models.LoginModel”的项

我的联系方式视图:

    @model My_Project.Model.ContactModel
@{
    ViewBag.Title = "Contact";
}

        @using (Html.BeginForm("Contact", "Home", FormMethod.Post, new { id = "formContact" }))
        {
            @Html.ValidationSummary(true)
            @Html.TextBoxFor(model => model.Name, new {@class = "c2inp1", @placeholder = "Name"})
            @Html.ValidationMessageFor(model => model.Name)
            <br/>
            @Html.TextBoxFor(model => model.Surname, new {@class = "c2inp2", @placeholder = "Surname"})
            @Html.ValidationMessageFor(model => model.Surname)
            <br/>
            @Html.TextBoxFor(model => model.Email, new {@class = "c2inp2", @placeholder = "Email"})
            @Html.ValidationMessageFor(model => model.Email)
            <br/>
            @Html.TextAreaFor(model => model.Message, new { @class = "c2inp3", @placeholder = "Message" })
            @Html.ValidationMessageFor(model => model.Message)
            <br/>            
            <input type="image" src="@Url.Content("~/Images/c2img4.png")" alt="" class="c2submit"/>
        }
    </div>
</div>

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

如何解决此问题?

传递给视图的数据类型应与您在视图中声明的模型相对应。例如:

public ActionResult SomeDerp()
{
    Derp derp = new Derp();
    return View(derp);
}
@model Derp
然后,视图应该在SomeDerp页面的顶部声明一个模型,可能是这样的:

public ActionResult SomeDerp()
{
    Derp derp = new Derp();
    return View(derp);
}
@model Derp

抱歉,如果我误解了您的问题:)

您传递给视图的数据类型应该与您在视图中声明的模型相对应。例如:

public ActionResult SomeDerp()
{
    Derp derp = new Derp();
    return View(derp);
}
@model Derp
然后,视图应该在SomeDerp页面的顶部声明一个模型,可能是这样的:

public ActionResult SomeDerp()
{
    Derp derp = new Derp();
    return View(derp);
}
@model Derp

抱歉,如果我误解了您的问题:)

您需要在_layout.cshtml视图中指定要传递到登录视图的模型

例如:

@Html.Partial("_yourloginview", new LoginModel())

您需要在_layout.cshtml视图中指定要传递到登录视图的模型

例如:

@Html.Partial("_yourloginview", new LoginModel())

这是因为您在_layout.cshtml中指定了登录模型,因此每个页面现在也需要此模型。

这是因为您在_layout.cshtml中指定了登录模型,因此每个页面现在也需要此模型。

谢谢您的回答,但我已经在这样做了。这不是我的问题:)谢谢你的回答,但我已经在做了。这不是我的问题:)你能提供更多的信息,比如查看代码吗?您还可以告诉我们该方法是哪个控制器的一部分吗?操作是否返回部分或完全打开视图?您能否提供一些更多信息,例如视图代码?您还可以告诉我们该方法是哪个控制器的一部分吗?操作是否返回部分或完全打开视图?