Lia*_*amB 4 c# asp.net asp.net-mvc
我有一个表单,用户可以用他们想要的数据填写x次.表单将发布到以下操作.
[HttpPost]
public ActionResult Manage(ProductOptionModel DataToAdd)
{
if (!ModelState.IsValid)
{
return View(DataToAdd);
}
var ProdServ = new ProductService();
if (DataToAdd.ID != 0)
{
//Edit Mode.
DataToAdd = ProdServ.EditProductOption(DataToAdd);
ViewData["Message"] = "Option Changes Made";
}else
{
//Add
DataToAdd = ProdServ.AddProductOption(DataToAdd);
ViewData["Message"] = "New Option Added";
}
var RetModel = new ProductOptionModel() {ProductID = DataToAdd.ProductID};
return View(RetModel);
}
Run Code Online (Sandbox Code Playgroud)
所以在底部我将模型空白(只留下所需的字段),然后返回到视图.但是,该视图包含先前提交的表单中的数据.
有什么想法吗?我调试了代码并检查了RetModel变量是否为空.
在HTTP POST上返回视图时,Html帮助程序以这种方式工作.他们更喜欢发布数据而非模型值.
这就是为什么我建议你使用在Asp.net MVC中得到很好支持的Post/Redirect/Get模式.POST成功完成后,您的控制器操作应重定向到某些GET操作,就像您的情况一样.
public ActionResult Process()
{
return View(new Data { Id = -1 });
}
[HttpPost]
public ActionResult Process(Data data)
{
if (!this.ModelState.IsValid)
{
return View(data);
}
new MyService().ProcessData(data);
return RedirectToAction("Process");
}
Run Code Online (Sandbox Code Playgroud)
如果您显示所有先前输入的数据,您可以在GET操作中提供这些数据,或使用TempData字典将它们从POST传输到GET操作.
| 归档时间: |
|
| 查看次数: |
992 次 |
| 最近记录: |