在我的基本Controller类中,我有以下定义的
[AcceptVerbs(HttpVerbs.Get)]
public virtual ActionResult Edit(long Id)
{
}
到目前为止一切都很好。但是在从上面开始的新控制器类中,我需要将方法签名更改为:
[AcceptVerbs(HttpVerbs.Get)]
public new ActionResult Edit(string Id)
{
}
请注意,参数Id现在是字符串。但是,当在后代控制器上调用该操作时,我收到以下错误:
参数字典包含参数' Id'的空条目。非可空类型的System.Int64' for method' System.Web.Mvc.ActionResult Edit(Int64)'在' XXXX.Controllers.MlControllerGridView`2 [MakersLane.Web.ViewModels.Login.LoginAddEditViewModel,XXXX.Web.ViewModels.Login.LoginAddEditViewModel]'。可选参数必须是引用类型,可空类型,或者声明为可选参数。 参数名称:参数
所以我的问题是如何在我的后代控制器中将参数Id更改为 string 类型而不访问任何基本行为?
答案 0 :(得分:1)
我通过使用[NonAction]属性解决了这个问题。这样,“long id”被“删除”并正确地获取“string id”版本。不漂亮,但它确实有效。
public ActionResult Edit(string Id)
{
return RedirectToAction("NotYetImplemented", "SystemManagement");
}
/// <summary>
/// To work around the base class requiredment that the Id be a long we override the
/// base class and mark this as not an action. Use the string version instead.
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
[NonAction]
public override ActionResult Edit(long Id)
{
return RedirectToAction("NotYetImplemented", "SystemManagement");
}