2011-03-04 40 views

回答

2

使用的ViewData存储成功消息。在Controller中创建成功消息并在View中检查它。如果存在,则渲染它。

12
在你的控制器

,你可以这样做:

ViewData["Message"] = "Success" 

,并在您的视图,你可以检查是否有显示一条消息,如果是不是显示它:

@if (ViewData["Message"] != null) 
    <div>success</div> 
+11

实际显示存储的消息而不是完全不同的消息会更有意义吗? – Kehlan 2013-08-13 19:22:48

0

我倾向于将我的错误和成功存储在同一个数组/对象中,并将它们传递给视图。

因为大多数我的错误/成功信息将出现在同一个地方,他们通常不会在同一时间出现,这通常不是一个问题。

我有一个叫ShowFeedback()函数被调用的用户控件和做决定要显示什么样的逻辑。错误和成功在HTML中被标记为相同,只有css有点不同。所以,你可以有

<div id="feedback" class="error"> 
    Your error message 
</div> 

<div id="feedback" class="success"> 
    Your success message 
</div> 
16

如果您在不同的页面上显示的消息比ViewData不会帮你,因为它与每个请求重新初始化。另一方面,TempData可以存储两个请求的数据。这里有一个例子:

public ActionResult SomeAction(SomeModel someModel) 
     { 
      if (ModelState.IsValid) 
      { 
       //do something 
       TempData["Success"] = "Success message text."; 
       return RedirectToAction("Index"); 
      } 
      else 
      { 
       ViewData["Error"] = "Error message text."; 
       return View(someModel); 
      } 
     } 

里面if块,你必须使用TempData,因为你正在做的重定向(另收费),但没有别的里面,你可以使用ViewData

而且里面查看你可以有这样的事情:

@if (ViewData["Error"] != null) 
{ 
    <div class="red"> 
     <p><strong>Error:</strong> @ViewData["Error"].ToString()</p> 
    </div> 
} 
@if (TempData["Success"] != null) 
{ 
    <div class="green"> 
     <p><strong>Success:</strong> @TempData["Success"].ToString()</p> 
    </div> 
} 
+0

是不是真的有需要重新实现错误处理,因为它已经内置了通过ModelState.AddModelError()。除了编写更少的代码之外,您还可以更好地控制要验证错误出现的位置(Html.ValidationSummary()和Html.ValidationMessageFor())。此外,使用验证框架/插件变得更容易连接,因为它们也遵守ModelState标准。 – 2011-05-17 14:54:41

+5

@丹尼尔我同意,但问题是关于成功消息不验证错误;) – frennky 2011-05-17 21:56:53

+0

我推荐这种类型的消息视图在母版页。 – qub1n 2015-05-30 19:36:39

1

TempData的可用于像一本字典。 每个保存的值将持续当前和下一个请求。 适合重定向。

this.TempData["messages"] = "Success!"; 
return RedirectToAction("YourAction");