2014年10月28日 星期二

ViewBag & ViewData

 

Tool:Visual Studio 2013 Ultimate Update 3
OS:Windows 8.1
ASP.NET MVC 5

在Controller的Action Method要傳資料到View,可以使用ViewBag或ViewData。ViewBag底層是透過ViewData來實作,提供一種比較簡易的撰寫語法。

ViewBag是dynamic的,因此有一個限制,不能夠當做擴充方法的參數。

 

例如在Controller Action Method中包含:

public class HomeController : Controller {
  public ActionResult Index( ) {
    ViewBag.userName = "Mary";
    return View( );
  }  
}

在View中,使用ViewBag取回料,當做HTML.TextBox的參數:

@Html.TextBox( "userName" , ViewBag.userName )
則執行View時,會有錯誤訊息:

Compiler Error Message: CS1973: 'System.Web.Mvc.HtmlHelper<dynamic>' has no applicable method 
named 'TextBox' but appears to have an extension method by that name. Extension methods cannot be
dynamically dispatched. Consider casting the dynamic arguments or calling the extension method without the
extension method syntax.
 

image


解決的方法,改用ViewData



@Html.TextBox( "userName" , ViewData["userName"] )


另一種做法,明確轉型:



@Html.TextBox( "userName" , (string)ViewBag.userName)

沒有留言:

總瀏覽量