在mvc中一次保存多个视图的模型数据

本文关键字:视图 数据 模型 保存 一次 mvc | 更新日期: 2023-09-27 18:25:07

我有5个类:

1) EmployeeMainTable.cs(Employeeid是主键,Employeeid是类其余部分的外键)

2) EmployeeFamilyTable.cs

3) 以前的工作.cs

4) employeeaddress.cs

5) employeeEducation.cs

每个类包含各自的属性在此处输入代码

现在我想为每个类做的是,我已经创建了5个视图来输入数据,每个视图都包含提交按钮以转到下一个视图

我的问题是,当我在最后一个视图中单击完成按钮时,我想一次保存所有模型。

请理解问题一次我使用mvc 4


我尝试过以下结果:

@model SecondStep
@using(Html.BeginForm("ThirdStep", "controllerName", FormMethod.Post))
{ 
    @Html.HiddenFor(model => ViewBag.FirstStepModel.Value) 
    @Html.EditorFor(model => model.Value)
    <input type="submit" value="Next"/>
}

CS1963: An expression tree may not contain a dynamic operation

中出现错误

@Html.HiddenFor(model => ViewBag.FirstStepModel.Value)
Line 13: { 
Line 14:
Line 15: @Html.HiddenFor(model=>ViewBag.FirstStepModel) this line giving error 
Line 16: @Html.EditorFor(model => model.SecondStepProp) 
Line 17:

在mvc中一次保存多个视图的模型数据

您应该将以前的视图模型长时间传递到"下一个"视图,因此当单击"完成"按钮时,您可以检索所有要在最后创建的模型(在控制器中)。(别忘了把你的模型放在帖子里)

更新1:

为什么您需要在控制器上使用GET和POST方法?

USPDATE2:示例

**案例1:如果您有多个视图模型**

控制器

[HttpGet]
public ActionResult FirstStep()
{
    return View(new FirstStepModel());
}
[HttpPost]
public ActionResult SecondStep(FirstStepModel firstStepModel)
{
    ViewBag.FirstStepModel = firstStepModel;
    return View(new SecondStepModel());
}
[HttpPost]
public ActionResult ThridStep(FirstStepModel firstStepModel, SecondStepModel secondStepModel)
{
    ViewBag.FirstStepModel = firstStepModel;
    ViewBag.SecondStepModel = secondStepModel;
    return View(new ThirdStepModel());
}
[HttpPost]
public ActionResult FourthStep(FirstStepModel firstStepModel, SecondStepModel secondStepModel, ThirdStepModel thirdStepModel)
{
    ViewBag.FirstStepModel = firstStepModel;
    ViewBag.SecondStepModel = secondStepModel;
    ViewBag.ThirdStepModel = thirdStepModel;
    return View(new FourthStepModel()));
}
[HttpPost]
public ActionResult FifthStep(FirstStepModel firstStepModel, SecondStepModel secondStepModel, ThirdStepModel thirdStepModel, FourthStepModel fourthStepModel)
{
    ViewBag.FirstStepModel = firstStepModel;
    ViewBag.SecondStepModel = secondStepModel;
    ViewBag.ThirdStepModel = thirdStepModel;
    ViewBag.FourthStepModel = fourthStepModel;
    return View(new FinalStepModel());
}
[HttpPost]
public ActionRestul Finish(FirstStepModel firstStepModel, SecondStepModel secondStepModel, ThirdStepModel thirdStepModel, FourthStepModel fourthStepModel, FifthStepModel fifthStepModel)
{
    // DB Save ?
}

视图第一步:

@model FirstStep
@using(Html.BeginForm("SecondStep", "controllerName", FormMethod.Post))
{
    @Html.EditorFor(model => model.Value)
    <input type="submit" value="Next"/>
}

第二步:

@model SecondStep
@using(Html.BeginForm("ThirdStep", "controllerName", FormMethod.Post))
{ 
    @Html.HiddenFor(model => ViewBag.FirstStepModel.Value) 
    @Html.EditorFor(model => model.Value)
    <input type="submit" value="Next"/>
}

第三步:

@model ThirdStep
@using(Html.BeginForm("FourthStep", "controllerName", FormMethod.Post))
{  
    @Html.HiddenFor(model => ViewBag.FirstStepModel.Value) 
    @Html.HiddenFor(model => ViewBag.SecondStepModel.Value) 
    @Html.EditorFor(model => model.Value)
    <input type="submit" value="Next"/>
}

第四步:

@model FourthStep
@using(Html.BeginForm("FifthStep", "controllerName", FormMethod.Post))
{
    @Html.HiddenFor(model => ViewBag.FirstStepModel.Value) 
    @Html.HiddenFor(model => ViewBag.SecondStepModel.Value) 
    @Html.HiddenFor(model => ViewBag.ThirdStepModel.Value) 
    @Html.EditorFor(model => model.Value)
    <input type="submit" value="Next"/>
}

第五步:

@model FifthStep
@using(Html.BeginForm("Finish", "controllerName", FormMethod.Post))
{
    @Html.HiddenFor(model => ViewBag.FirstStepModel.Value) 
    @Html.HiddenFor(model => ViewBag.SecondStepModel.Value) 
    @Html.HiddenFor(model => ViewBag.ThirdStepModel.Value) 
    @Html.HiddenFor(model => ViewBag.FifthStepModel.Value) 
    @Html.EditorFor(model => model.Value)
    <input type="submit" value="Next"/>
}

案例2:单视图模型小心:要做到这一点,你需要(根据你的模型的复杂性)一个模型的ModelBinder

[HttpGet]
public ActionResult FirstStep()
{
    return View("FirstStep", new Model());
}
[HttpPost]
public ActionResult SecondStep(Model model)
{
    return View("SecondStep", model);
}
[HttpPost]
public ActionResult ThridStep(Model model)
{
    return View("ThirdStep", model);
}
[HttpPost]
public ActionResult Finish(Model model)
{
    // DB Save ?
}

视图

第一步:

@model Model
@using(Html.BeginForm("SecondStep", "controllerName", FormMethod.Post))
{
    @Html.EditorFor(model => model.Step1Value)
    <input type="submit" value="Next"/>
}

第二步:

@model Model
@using(Html.BeginForm("ThirdStep", "controllerName", FormMethod.Post))
{
    @Html.HiddenFor(model => model.Step1Value)
    @Html.EditorFor(model => model.Step2Value)
    <input type="submit" value="Next"/>
}

第三步:

@model Model
@using(Html.BeginForm("Finish", "controllerName", FormMethod.Post))
{
    @Html.HiddenFor(model => model.Step1Value)
    @Html.HiddenFor(model => model.Step2Value)
    @Html.EditorFor(model => model.Step3Value)
    <input type="submit" value="Next"/>
}