gpt4 book ai didi

asp.net-mvc-3 - 扩展方法无法动态调度错误 - 我该如何解决?

转载 作者:行者123 更新时间:2023-12-01 01:33:21 32 4
gpt4 key购买 nike

找不到解决此问题的正确方法。

我正在使用 [Serializable] (MVC3 Futures) 以便有一个具有单独 View 的“向导”。这是我的 Controller 中要序列化的代码:

 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;
}

进一步在我的 Controller 中,我做这样的事情(只是一个片段 - 代码通过向导使用下一个和后退按钮字符串):
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);
}

在我的 .cshtml看,我有这个:
@using (Html.BeginFormAntiForgeryPost())
{
@Html.Hidden("myData", new MvcSerializer().Serialize(Model, SerializationMode.Signed))
...
@Html.TextBoxFor(m => model.Step.EMail)
...
}

因为我使用的是动态,所以我必须在 View 中使用一个变量:
var model = (MyViewModel) Model.myData;

为了做 @Html.TextBoxFor以上。这就是我的问题,因为如果我这样做 @model MyViewModel相反,那么我不能做 model.Step.EMail .但由于动态, @Html.Hidden不起作用,我收到以下错误:

Compiler Error Message: CS1973: 'System.Web.Mvc.HtmlHelper' has no applicable method named 'Hidden' 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.



我可以在没有 [Serializable] 的情况下切换到其他方式来执行此操作,但随后我必须转换大量代码。有什么办法可以使这项工作?

最佳答案

扩展方法无法识别方法,因为数据类型不匹配。
尝试将其转换为对象。

@Html.Hidden("myData", new MvcSerializer().Serialize(Model, SerializationMode.Signed) as Object)

或者
@Html.Hidden("myData", (Object)new MvcSerializer().Serialize(Model, SerializationMode.Signed))

它会起作用。

关于asp.net-mvc-3 - 扩展方法无法动态调度错误 - 我该如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13432063/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com