我一直在研究MVC4 C#应用程序,并通过链接向控制器发送一个值
<a href="@Url.Action("MyAction", "Home", new { Id = @ViewBag.id})">@ViewBag.option2</a>
并且工作正常,但现在我需要通过相同的链接将三个值发送到同一个控制器并验证值不为空
<a href="@Url.Action("MyAction", "Home", new { Id = @ViewBag.id, Id2 = @ViewBag.grupo, Id3 = @ViewBag.correlativo })">@ViewBag.option2</a>
但是得到下一个错误
Message =参数字典包含非可空类型'System.Int32'参数'grupo'的空条目,方法'System.Web.Mvc.ActionResult ModificarOrdenInicioFormulario(System.String,Int32,Int32)'' GFC_Site.Controllers.HomeController”。可选参数必须是引用类型,可空类型,或者声明为可选参数。参数名称:参数
这是我的家庭控制器中的操作
public ActionResult MyAction(string Id, Int32 grupo, Int32 correlativo)
这是我的RouteConfig
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
你能告诉我要添加什么或错误在哪里吗?
答案 0 :(得分:2)
您当前的代码正在生成此链接的href属性值
Home/MyAction/10?id2=123&id3=456
但您的操作方法参数为Id
,grupo
和correlativo
。
您的操作方法参数名称应与路径值字典键匹配。
使用grupo
和correlativo
作为路线值项目键,而不是id2
和id3
<a href="@Url.Action("MyAction", "Home",
new { Id = @ViewBag.id,
grupo = @ViewBag.grupo,
correlativo = @ViewBag.correlativo })">@ViewBag.option2</a>
这将生成像这样的href
属性值,它具有与动作方法参数名匹配的正确查询字符串
Home/MyAction/10?grupo=123&correlativo=456
这应该有效,假设您的ViewBag项目设置了有效(非空)数值。如果这些可能为null,请考虑将您的操作方法参数从int
更改为nullable int(int?
)
url中的路由值10
将自动映射到名为Id
的参数,因为我们在RegisterRoutes
方法中注册的默认路由模式中定义了该值。
答案 1 :(得分:1)
<a href="@Url.Action("MyAction", "Home", new
{
Id = @ViewBag.id,
grupo = @ViewBag.grupo,
correlativo = @ViewBag.correlativo
})">@ViewBag.option2</a>
您的参数名称必须相同。要处理空案例,您可以将操作签名更改为public ActionResult MyAction(string Id, Int32? grupo, Int32? correlativo)