Joh*_*n S 7 asp.net-mvc asp.net-mvc-3
我有一个使用ASP.Net MVC和EF5的项目.模型具有足够多的字段,应用程序将需要多个页面来收集所有数据.
收集数据后,将其提交给Web服务/ WebAPI.(这不能改变,或者我会使用EF实体).
在填充时,从页面到页面持久保存数据模型的最佳实践或最佳建议是什么?
Rob*_*Rob 11
您可以创建一个每个页面使用的ViewModel类(强类型视图),只存储未在隐藏字段中编辑的字段.您的控制器将为每个步骤提供操作方法和视图.提交每个步骤后,您将返回视图(以及视图模型)以进行下一步.
在最后一页上,您提交视图模型并保存.
控制器代码:
[HttpPost]
public ActionResult Step1(MyBigViewModel model)
{
//do work
return View("Step2", model);
}
[HttpPost]
public ActionResult Step2(MyBigViewModel model)
{
//do work
return View("Step3", model);
}
[HttpPost]
public ActionResult Step3(MyBigViewModel model)
{
//save here
return View("Success", model);
}
Run Code Online (Sandbox Code Playgroud)
另一种选择是在单个页面上使用"类似向导"的UI.这是我以前成功使用的一个:
https://github.com/mstratman/jQuery-Smart-Wizard
Ima*_*ani 10
问题 - 1
为什么我不能
Domain Model
直接与View交互或为什么我不能创建一个View Model
并传递所有Properties
的Domain-Model
?
回答
假设你班上有50个领域.我已经实现了数据注释,因此也存在必填字段.好.我在步骤1.我提交了表格.我的帖子行动方法说,表格无法提交!!!! 为什么???
这是因为有一些必填字段不是第1步的一部分.我有一个问题.你想Properties
在其他答案中保留所有内容吗?如果你想在一个中添加所有属性,View-Model
那么为什么一个人根据其他答案中提供的建议直接与Domain-Model交互?因此,在一个View-Model中添加所有属性将是最糟糕的.对?
问题2
在填充时,从页面到页面持久保存数据模型的最佳实践或最佳建议是什么?
回答
1. Use View Models with necessary properties only(that are required for
particular Step.). So there can be many View Models on the basis of
your Steps. This process will be very useful in long run
2. Use AutoMapper to populate the info required for View Model from Domain Model.
Run Code Online (Sandbox Code Playgroud)
使用Strongly Types View Models
,一旦数据发送到Post Action Method
之后,据我所知,您可以TempData
用来存储发布的数据.它就像一个DataReader Class
,一旦读取,数据就会丢失.因此,存储的数据TempData
将在读取后变为空.
var Value = TempData["keyName"] //Once read data will be lost
Run Code Online (Sandbox Code Playgroud)
问题 - 3
模型具有足够多的字段,应用程序将需要多个页面来收集所有数据.
回答
因此,即使在读取数据之后仍然保持数据,您可以Alive
像下面那样
var Value = TempData["keyName"];
TempData.Keep(); //Data will not be lost for all Keys
TempData.Keep("keyName"); //Data will not be lost for this Key
Run Code Online (Sandbox Code Playgroud)
问题 - 4
How will you handle the case when you have both Next and Previous Buttons?
Run Code Online (Sandbox Code Playgroud)
回答
TempData
也适用于新的Tabs/Windows,就像Session
变量一样.
您也可以使用Session
Variable,您也可以在控制器/区域之间保持数据
希望这篇文章能帮到你.
归档时间: |
|
查看次数: |
10132 次 |
最近记录: |