验证错误后如何将隐藏的字段数据保留在模型中[MVC]

时间:2016-04-06 05:51:04

标签: c# asp.net-mvc validation asp.net-mvc-4

我有这个整洁的模型,它在屏幕上填充并在成功验证时插入数据库。为了使Web应用程序更易于使用,我在发布数据后将其重定向到特定的URL。为此,我将URL作为隐藏字段传递(URL是动态的,取决于Get请求)。当然,在验证失败时,将返回模型,并重新填充文本框和其他编辑器,但不包含URL的隐藏字段。如何在验证错误后重新填充它,而不是模型的一部分?

这是我的一些代码:

-get method:

public ActionResult Create()
    {
        ViewBag.returnUrl = System.Web.HttpContext.Current.Request.UrlReferrer; ....

-post方法:

[HttpPost]        
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "Issue_ID,Issue,Case_Status,
Issued_by,Issue_Date...,HelpDesk_Service_Request_Ticket_Number")] Case @case, string returnUrl)
.
.
.
if (ModelState.IsValid)
        {
            db.Cases.Add(@case);
            db.SaveChanges();
            if (returnUrl == null)
            {
                return RedirectToAction("Index");
            }
            else
            {
                return Redirect(returnUrl);
            }
        }

        return View(@case);

提前致谢!

2 个答案:

答案 0 :(得分:2)

从您的问题我明白您想要将返回网址值从一个操作(GET)传递到另一个操作(POST)。您可以将值存储在TempData

TempData["returnUrl"] = new Uri("<return url>");

然后尝试使用

访问它
var returnUrl= TempData["returnUrl"]; 

请注意,一旦从TempData读取值,它就会自动从集合中删除。要保留该值,可以使用keep()或peek()方法。请参阅回答here

的类似问题

答案 1 :(得分:1)

Viewbag仅适用于当前请求。您需要使用TempData。

请检查此帖子Viewbag passing value