在ASP.NET MVC Razor模型中绑定两个表

本文关键字:两个 绑定 NET ASP MVC Razor 模型 | 更新日期: 2023-09-27 18:25:45

在一个类中绑定具有两个表的模型时,我遇到了问题。表单在将值发布到控制器时未将值绑定到模型。

型号:

public class BasicProfileModel {
    public BasicProfileModel() {
        this.user = new User();
        this.basicProfile = new BasicProfile();
    }
    public User user { get; set; }
    public BasicProfile basicProfile { get; set; }        
}

User和Basic Profile类是两个具有以下属性的表:

public class User {
    public string UserId { get; set; }//not null and PK
    public string EmailId { get; set; }//no null
    public string Salt { get; set; }//not null
    public string Password { get; set; }//not null
    public string Role { get; set; }//not null
    public bool HasCompleteProfile { get; set; }//not null
}
public class BasicProfile {
    public string UserId { get; set; }//not null FK
    public string FirstName { get; set; }//not null
    public string LastName { get; set; }
    public string Gender { get; set; }//not null
    public int YearOfBirth { get; set; }//not null
    public bool IsApprovedByUser { get; set; }//not null
    public bool IsApprovedByAdmin { get; set; }//not null
    public bool IsActiveByUser { get; set; }//not null
    public bool isActiveByAdmin { get; set; }//not null
}

当我加载视图时,模型显示在控制器(生成视图)或视图c#代码部分顶部初始化的任何值。但当我发布表单时,控制器显示的模型根本没有任何值。当我为单个表创建控制器/视图时,一切都很好。以下是控制器操作方法和视图的代码。

public ActionResult BasicRegister() {
        BasicProfileModel model = new BasicProfileModel();
        //any value initialised in model here displays in view elements e.g. text boxes.
        return View("BasicRegister", model);
    }
    [HttpPost]
    public ActionResult DoBasicRegister(BasicProfileModel basicProfile) {
        return View("BasicRegister", basicProfile);
    }

//这是视图

@model BasicProfileModel

@using (Html.BeginRouteForm("DoBasicRegister", FormMethod.Post)) {
<div>
    @Html.TextBoxFor(m => m.user.EmailId)
</div>
<div>
    @Html.TextBoxFor(m => m.user.Password)
</div>
<div>
    @Html.TextBoxFor(m => m.basicProfile.FirstName)
</div>
<div>
    @Html.TextBoxFor(m => m.basicProfile.LastName)
</div>
<div>
    <input type="submit" value="send" />
</div>

}

//路由

routes.MapRoute(
            name: "BasicRegister",
            url: "join",
            defaults: new { controller = "Home", action = "BasicRegister" }
            );
        routes.MapRoute(
            name: "DoBasicRegister",
            url: "dojoin",
            defaults: new { controller = "Home", action = "DoBasicRegister" }
            );

在ASP.NET MVC Razor模型中绑定两个表

您的模型是null,因为您的模型有一个名为basicProfile的属性,而POST方法有一个同名的参数。

将方法中参数的名称更改为(例如)

[HttpPost]
public ActionResult DoBasicRegister(BasicProfileModel model) {

并且该模型将被正确地绑定。

旁注:由于视图只包括数据模型的一些属性,因此正确的方法是使用只包括视图中显示/编辑的属性的视图模型。

路由配置不正确,我相信如果你能正确映射路由,它就会起作用。尝试以下的路线

routes.MapRoute(
            name: "BasicRegister",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "BasicRegister", id = UrlParameter.Optional }
            );
        routes.MapRoute(
            name: "DoBasicRegister",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "DoBasicRegister" , id = UrlParameter.Optional}
            );