Asp.net mvc 4 Net MVC创建视图多个模型

Asp.net mvc 4 Net MVC创建视图多个模型,asp.net-mvc-4,Asp.net Mvc 4,好的,我有下面的场景 我有两个数据模型,一个是用户详细信息,如下所示 public partial class user_details { public int id { get; set; } public string username { get; set; } public string pincode { get; set; } public string mobilenumber { get; set; } public int secq1i

好的,我有下面的场景

我有两个数据模型,一个是用户详细信息,如下所示

public partial class user_details
{
    public int id { get; set; }
    public string username { get; set; }
    public string pincode { get; set; }
    public string mobilenumber { get; set; }
    public int secq1id { get; set; }
    public string secanswer1 { get; set; }
    public int secq2id { get; set; }
    public string secanswer2 { get; set; }
}
public partial class security_questions
{
    public int id { get; set; }
    public string security_question { get; set; }
}
public class NewUserProfileViewModel
{
    public IEnumerable<security_questions> Questions { get; set; }
    public IEnumerable<user_details> EditableDetails { get; set; }
}

public class ProfileController : Controller
{
    private readonly CCLPasswordManagementDBEntities passwordManagementConnection = new CCLPasswordManagementDBEntities();

    public ActionResult Manage()
    {
        bool userfound = false;
        var userItemsModel = passwordManagementConnection.View_registered_userdetails;

        foreach (var item in userItemsModel.Where(item => item.username == User.Identity.Name))
        {
            userfound = true;
        }
        if (userfound)
        {
            UserProfileInfoViewModel upi = new UserProfileInfoViewModel
            {
                RegisteredDetails = userItemsModel,
                Questions = passwordManagementConnection.security_questions
            };
            return View(upi);
        }
        return RedirectToAction("Register");
    }

    public ActionResult Register()
    {
        NewUserProfileViewModel upi = new NewUserProfileViewModel
        {
            Questions = passwordManagementConnection.security_questions,
            EditableDetails = passwordManagementConnection.user_details
        };
        return View(upi);
    }

    [HttpPost]
    public ActionResult Register(NewUserProfileViewModel newUserProfile)
    {
        if (ModelState.IsValid)
        {
            return RedirectToAction("Index", "Home");
        }
        else
        {
            return View(newUserProfile);
        }
    }
另一个是安全问题模型,如下所示

public partial class user_details
{
    public int id { get; set; }
    public string username { get; set; }
    public string pincode { get; set; }
    public string mobilenumber { get; set; }
    public int secq1id { get; set; }
    public string secanswer1 { get; set; }
    public int secq2id { get; set; }
    public string secanswer2 { get; set; }
}
public partial class security_questions
{
    public int id { get; set; }
    public string security_question { get; set; }
}
public class NewUserProfileViewModel
{
    public IEnumerable<security_questions> Questions { get; set; }
    public IEnumerable<user_details> EditableDetails { get; set; }
}

public class ProfileController : Controller
{
    private readonly CCLPasswordManagementDBEntities passwordManagementConnection = new CCLPasswordManagementDBEntities();

    public ActionResult Manage()
    {
        bool userfound = false;
        var userItemsModel = passwordManagementConnection.View_registered_userdetails;

        foreach (var item in userItemsModel.Where(item => item.username == User.Identity.Name))
        {
            userfound = true;
        }
        if (userfound)
        {
            UserProfileInfoViewModel upi = new UserProfileInfoViewModel
            {
                RegisteredDetails = userItemsModel,
                Questions = passwordManagementConnection.security_questions
            };
            return View(upi);
        }
        return RedirectToAction("Register");
    }

    public ActionResult Register()
    {
        NewUserProfileViewModel upi = new NewUserProfileViewModel
        {
            Questions = passwordManagementConnection.security_questions,
            EditableDetails = passwordManagementConnection.user_details
        };
        return View(upi);
    }

    [HttpPost]
    public ActionResult Register(NewUserProfileViewModel newUserProfile)
    {
        if (ModelState.IsValid)
        {
            return RedirectToAction("Index", "Home");
        }
        else
        {
            return View(newUserProfile);
        }
    }
然后我有一个控制器,看起来像这样

public partial class user_details
{
    public int id { get; set; }
    public string username { get; set; }
    public string pincode { get; set; }
    public string mobilenumber { get; set; }
    public int secq1id { get; set; }
    public string secanswer1 { get; set; }
    public int secq2id { get; set; }
    public string secanswer2 { get; set; }
}
public partial class security_questions
{
    public int id { get; set; }
    public string security_question { get; set; }
}
public class NewUserProfileViewModel
{
    public IEnumerable<security_questions> Questions { get; set; }
    public IEnumerable<user_details> EditableDetails { get; set; }
}

public class ProfileController : Controller
{
    private readonly CCLPasswordManagementDBEntities passwordManagementConnection = new CCLPasswordManagementDBEntities();

    public ActionResult Manage()
    {
        bool userfound = false;
        var userItemsModel = passwordManagementConnection.View_registered_userdetails;

        foreach (var item in userItemsModel.Where(item => item.username == User.Identity.Name))
        {
            userfound = true;
        }
        if (userfound)
        {
            UserProfileInfoViewModel upi = new UserProfileInfoViewModel
            {
                RegisteredDetails = userItemsModel,
                Questions = passwordManagementConnection.security_questions
            };
            return View(upi);
        }
        return RedirectToAction("Register");
    }

    public ActionResult Register()
    {
        NewUserProfileViewModel upi = new NewUserProfileViewModel
        {
            Questions = passwordManagementConnection.security_questions,
            EditableDetails = passwordManagementConnection.user_details
        };
        return View(upi);
    }

    [HttpPost]
    public ActionResult Register(NewUserProfileViewModel newUserProfile)
    {
        if (ModelState.IsValid)
        {
            return RedirectToAction("Index", "Home");
        }
        else
        {
            return View(newUserProfile);
        }
    }
公共类NewUserProfileViewModel
{
公共IEnumerable问题{get;set;}
公共IEnumerable EditableDetails{get;set;}
}
公共类ProfileController:控制器
{
私有只读CCLPasswordManagementDBEntities密码管理连接=新CCLPasswordManagementDBEntities();
公共行动结果管理()
{
bool userfound=false;
var userItemsModel=passwordManagementConnection.View\u registered\u userdetails;
foreach(userItemsModel.Where(item=>item.username==User.Identity.Name)中的var项)
{
userfound=true;
}
if(userfound)
{
UserProfileInfoViewModel upi=新的UserProfileInfoViewModel
{
RegisteredDetails=userItemsModel,
问题=passwordManagementConnection.security\u问题
};
返回视图(upi);
}
返回重定向操作(“寄存器”);
}
公众行动结果登记册()
{
NewUserProfileViewModel upi=新的NewUserProfileViewModel
{
问题=passwordManagementConnection.security\u问题,
EditableDetails=passwordManagementConnection.user\u详细信息
};
返回视图(upi);
}
[HttpPost]
公共操作结果寄存器(NewUserProfileViewModel newUserProfile)
{
if(ModelState.IsValid)
{
返回重定向到操作(“索引”、“主页”);
}
其他的
{
返回视图(newUserProfile);
}
}
当它转到注册操作时,我有一个如下的视图

    @model ServiceDeskMVCTool.Controllers.NewUserProfileViewModel
@{
    ViewBag.Title = "Register Account";
    Layout = "~/Views/Shared/_CCLLayoutStandard.cshtml";
}

@section title {<h1>@ViewBag.Title</h1>}
@section subtitle {<h3>Hi @User.Identity.Name You have not set up your profile yet</h3>}

<div id="page-block" class="page-block-three row">
    <div class="col-lg-offset-3 col-lg-6">

        @using (Html.BeginForm())
        {
            @Html.ValidationSummary(true, "", new { @class = "text-danger" })
            <fieldset>
                <div class="form-group">
                    <h5>Pincode</h5>
                    @Html.TextBoxFor()
                </div>
            </fieldset>
            <div class="form-group">
                <h5>Pincode</h5>
                <input class="form-control ccl-form input-md" id="textinput" name="textinput" placeholder="Enter a 6 digit pincode" type="text">
            </div>
            <!-- Mobile Number -->
            <div class="form-group">
                <h5>Mobile Number</h5>
                <input class="form-control ccl-form input-md" id="textinput" name="textinput" placeholder="Enter your work mobile number" type="text">
            </div>
            <!-- Security Question 1 -->
            <div class="form-group">
                <h5>Security Question 1</h5>
                <select class="form-control ccl-form" id="selectbasic" name="selectbasic">
                    @foreach (var item in Model.Questions)
                    {
                        <option value="@item.id">@item.security_question</option>
                    }
                </select>
                <input class="form-control ccl-form input-md form-padding" id="textinput" name="textinput" placeholder="Enter your security answer" type="text">
            </div>
            <!-- Security Question 2 -->
            <div class="form-group">
                <h5>Security Question 2</h5>
                <select class="form-control ccl-form" id="selectbasic" name="selectbasic">
                    @foreach (var item in Model.Questions)
                    {
                        <option value="@item.id">@item.security_question</option>
                    }
                </select>
                <input class="form-control ccl-form input-md form-padding" id="textinput" name="textinput" placeholder="Enter your security answer" type="text">
            </div>
        }

        <button style="margin-top: 10px" class="btn ccl-btn ccl-btn-md ccl-btn-red pull-right" type="button">Register</button>
    </div>
</div>
@model servicesdeskmvctool.Controllers.NewUserProfileViewModel
@{
ViewBag.Title=“注册账户”;
Layout=“~/Views/Shared/\u CCLLayoutStandard.cshtml”;
}
@章节标题{@ViewBag.title}
@小节副标题{Hi@User.Identity.Name您尚未设置您的个人资料}
@使用(Html.BeginForm())
{
@Html.ValidationSummary(true,“,new{@class=“text danger”})
枕形
@Html.TextBoxFor()
枕形
手机号码
安全问题1
@foreach(模型中的var项。问题)
{
@项目1.安全问题
}
安全问题2
@foreach(模型中的var项。问题)
{
@项目1.安全问题
}
}
登记
我试图做的是生成一些Html.TextboxFor,但是当我传递Html.TextboxFor(model=>model.editabledetails.pincode)时,这不起作用

我对这方面还不太熟悉,所以请放轻松


谢谢!

您需要在视图模型中有一个单一的对象,而不是一个
IEnumerable
,才能绑定到它……试试这样的方法

查看模型

public class NewUserProfileViewModel
{
    public IEnumerable<security_questions> Questions { get; set; }
    public IEnumerable<user_details> EditableDetails { get; set; }

    public user_details UserDetail { get; set; }
}
@model servicesdeskmvctool.Controllers.NewUserProfileViewModel
@{
ViewBag.Title=“注册账户”;
Layout=“~/Views/Shared/\u CCLLayoutStandard.cshtml”;
}
@章节标题{@ViewBag.title}
@小节副标题{Hi@User.Identity.Name您尚未设置您的个人资料}
@使用(Html.BeginForm())
{
@Html.ValidationSummary(true,“,new{@class=“text danger”})
枕形
@TextBoxFor(x=>x.UserDetail.pincode,新的{@class=“表单控制ccl表单输入md”,placeholder=“输入6位pincode”})
手机号码
@Html.TextBoxFor(x=>x.UserDetail.mobilenumber,新的{@class=“表单控制ccl表单输入md”,placeholder=“输入您的工作手机号”})
安全问题1
@foreach(模型中的var项。问题)
{
@项目1.安全问题
}
@TextBoxFor(x=>x.UserDetail.secanswer1,新的{@class=“表单控制ccl表单输入md表单填充”,placeholder=“输入安全答案”})
安全问题2
@foreach(模型中的var项。问题)
{
@项目1.安全问题
}
@TextBoxFor(x=>x.UserDetail.secanswer2,新的{@class=“表单控制ccl表单输入md表单填充”,placeholder=“输入安全答案”})
}
这似乎起作用了


非常感谢您的帮助。

这解决了最初的问题,如果可以的话,还有一个问题。我需要在列表框中提取所选的安全问题并将其放置在模型中,我如何才能做到这一点?只需更改所选列表的名称属性以匹配视图模型,如
name='UserDetail.secanswer1'
等 etc@PaulCoan:如果这回答了您原来的问题,请接受。但是,如果您还有其他问题,您应该为此打开一个新问题。因此,基于以上内容,这就是我现在要说的