扩展方法无法动态调度错误 - 我该如何解决?

REM*_*ESQ 2 asp.net-mvc-3 asp.net-mvc-4

无法找到解决此问题的正确方法.

我正在使用[Serializable](MVC3期货)以获得具有单独视图的"向导".这是我的控制器中要序列化的代码:

 private MyViewModel myData;
        protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            var serialized = Request.Form["myData"];
            if (serialized != null) //Form was posted containing serialized data
            {
                myData = (MyViewModel)new MvcSerializer().Deserialize(serialized, SerializationMode.Signed);
                TryUpdateModel(myData);
            }
            else
                myData = (MyViewModel)TempData["myData"] ?? new MyViewModel();
            TempData.Keep();
        }
        protected override void OnResultExecuted(ResultExecutedContext filterContext)
        {
            if (filterContext.Result is RedirectToRouteResult)
                TempData["myData"] = myData;
        }
Run Code Online (Sandbox Code Playgroud)

沿着我的控制器还我这样做(只是一个片段 - 代码经过与向前和后退按钮Strings向导):

public ActionResult Confirm(string backButton, string nextButton)
        {
            if (backButton != null)
                return RedirectToAction("Details");

            else if ((nextButton != null) && ModelState.IsValid)
                return RedirectToAction("Submitted");
            else
                return View(myData);
        }
Run Code Online (Sandbox Code Playgroud)

在我.cshtml看来,我有这个:

@using (Html.BeginFormAntiForgeryPost())
    { 
         @Html.Hidden("myData", new MvcSerializer().Serialize(Model, SerializationMode.Signed))
    ...
         @Html.TextBoxFor(m => model.Step.EMail)
    ...
    }
Run Code Online (Sandbox Code Playgroud)

因为我正在使用动态,所以我必须在视图中使用变量:

var model = (MyViewModel) Model.myData;
Run Code Online (Sandbox Code Playgroud)

为了做到这一点@Html.TextBoxFor.这就是我的问题,因为如果我这样做@model MyViewModel,那么我就做不到model.Step.EMail.但由于动态,这@Html.Hidden将无法工作,我得到以下错误:

编译器错误信息:CS1973:"System.Web.Mvc.HtmlHelper"有一个名为"隐藏"不适用的方法,但似乎有这个名字的扩展方法.无法动态分派扩展方法.考虑转换动态参数或调用扩展方法而不使用扩展方法语法.

我可以切换到其他方式[Serializable],但没有,但我必须转换大量的代码.有没有办法让这项工作?

小智 6

扩展方法未识别方法,因为数据类型不匹配.尝试施放为对象.

@Html.Hidden("myData", new MvcSerializer().Serialize(Model, SerializationMode.Signed) as Object)
Run Code Online (Sandbox Code Playgroud)

要么

@Html.Hidden("myData", (Object)new MvcSerializer().Serialize(Model, SerializationMode.Signed))
Run Code Online (Sandbox Code Playgroud)

它会奏效.