Asp.net mvc 如何在一个视图中使用两个窗体

Asp.net mvc 如何在一个视图中使用两个窗体,asp.net-mvc,asp.net-mvc-4,razor,Asp.net Mvc,Asp.net Mvc 4,Razor,我可以在一个视图中添加多个表单吗?如何使用它。这可以只使用一个模型来完成,还是我需要为不同的表单使用不同的模型。谁能给我举个好例子,或者给我推荐一篇详细解释的好文章。您可能应该使用两个模型,每个模型使用局部视图。否则,在发布表单时,您需要考虑一个表单可能尚未填写,并且模型可能缺少数据 这是个好问题,当我还是mvc的新手时,我自己也遇到过这个问题 我认为这里的一个很好的例子是注册表单和登录表单在同一页上 关键字是ViewModel,这是解决此问题的关键 在模型类中: public class Lo

我可以在一个视图中添加多个表单吗?如何使用它。这可以只使用一个模型来完成,还是我需要为不同的表单使用不同的模型。谁能给我举个好例子,或者给我推荐一篇详细解释的好文章。

您可能应该使用两个模型,每个模型使用局部视图。否则,在发布表单时,您需要考虑一个表单可能尚未填写,并且模型可能缺少数据

这是个好问题,当我还是mvc的新手时,我自己也遇到过这个问题

我认为这里的一个很好的例子是注册表单和登录表单在同一页上

关键字是ViewModel,这是解决此问题的关键

在模型类中:

public class LoginModel
{
    public string UserName { get; set; }
    public string UserPassword { get; set; }
}

public class RegisterModel
{
    public int UserId { get; set; }
    public string UserName { get; set; }
    public string UserPassword { get; set; } 
}

public class ViewModel
{
    public LoginModel LoginModel { get; set; }
    public RegisterModel RegisterModel { get; set; }
}
在您的控制器中:

    public ActionResult Index()
    {
        var model = new ViewModel();
        model.LoginModel = new LoginModel();
        model.RegisterModel = new RegisterModel();
        return View(model);
    }
在您的视图中,我使用了1个主视图和2个局部视图将其拆分:

主要观点:

@model YourProject.Models.ViewModel

@Html.Partial("_LoginForm", Model.LoginModel)
@Html.Partial("_RegisterForm", Model.RegisterModel)
部分视图\u登录表单:

@model YourProject.Models.LoginModel

@using (Html.BeginForm("Login", "Home", FormMethod.Post))
{
    @Html.TextBoxFor(x => x.UserName)
    @Html.PasswordFor(x => x.UserPassword)

    <input type="submit" value="Log In" />
}
@model YourProject.Models.LoginModel
@使用(Html.BeginForm(“Login”、“Home”、FormMethod.Post))
{
@Html.TextBoxFor(x=>x.UserName)
@Html.PasswordFor(x=>x.UserPassword)
}
局部视图_注册表执行:

@model YourProject.Models.RegisterModel

@using (Html.BeginForm("Register", "Home", FormMethod.Post))
{
    @Html.TextBoxFor(x => x.UserName)
    @Html.PasswordFor(x => x.UserPassword)

    <input type="submit" value="Register" />
}
@model YourProject.Models.RegisterModel
@使用(Html.BeginForm(“Register”、“Home”、FormMethod.Post))
{
@Html.TextBoxFor(x=>x.UserName)
@Html.PasswordFor(x=>x.UserPassword)
}

请询问您是否有任何代码不清楚。

拉尔斯的回答是一个很好的解决方案。我甚至会说这样的话:

public class RegisterModel : LoginModel
{
    public int UserId { get; set; }
}

这样,您只需扩展基本模型类并保存几行代码。

模型?还是视图模型?-1:因为标签spamI刚刚开始学习MVC,我对如何识别它感到太困惑了。您已经提供了完整的简单解决方案。。。谢谢。我希望我能给+10