Asp.net MVC 操作 link
Asp.net MVC action link
我正在编写我的第一个 MVC 应用程序。在创建 link 以打开详细信息视图时,我必须传递 id。
控制器方法如下:
public ActionResult getDetails(int UserMasetrId)
{
...Some Code
}
在 VIEW link 中生成如下:
<a title="View Details" href="@Url.Action("getDetails", "UserMaster", new {id=item.UserMasterId})"></a>
对于上面的代码 link 生成为 ...controllername/getDetails/13616
。但它抛出错误:
"The parameters dictionary contains a null entry for parameter
'UserMasterId' of non-nullable type 'System.Int32' for method
'System.Web.Mvc.ActionResult getDetails(Int32)' in
'APP.Controllers.UserMasterController'. An optional parameter must be
a reference type, a nullable type, or be declared as an optional
parameter."
现在,如果我按如下方式更改操作 link?
<a title="View Details" href="@Url.Action("getDetails", "UserMaster", new {UserMasterId=item.UserMasterId})"></a>
它工作正常但 link 更改为 ...controllername/getDetails?UserMasterId=13616
所以请建议任何参数名称的解决方案,因为我在操作方法中写了,我希望 url 的格式不显示参数名称意味着 url 的格式应该 conrtoller/actionmethod/parametervalue
。
函数中的参数名称应与按钮中的查询参数匹配 link。
<a title="View Details" href="@Url.Action("getDetails", "UserMaster", new { UserMasterId = item.UserMasterId})"></a>
如果您不使用默认 Id
参数,您还应该声明一个路由。
[Route("ControllerName/getDetails/{UserMasterId}")]
public ActionResult getDetails(int? UserMasterId)
{
if (id == null)
{
return NotFound();
}
}
您使用的不是ActionLink
。您正在为您的 href
操作生成一个 link。您可以使用 HtmlHelper 生成适当的 a
标记:Html.ActionLink
如下所示:
Html.ActionLink("", "getDetails", "UserMaster", new { item.UserMasterId }, null)
假设 item.UserMasterId
为 1:
,这将生成这样的锚标记
<a href="/UserMaster/getDetails/1"></a>
并将您的 Controller
方法更改为:
public ActionResult getDetails(int? id)
{
...Some Code
}
如果你刚开始学习MVC,最好是学对了。您应该使用 Route 参数,而不是 QueryString 参数。所以让你的link保持原样
<a title="View Details" href="@Url.Action("getDetails", "UserMaster", new {id=item.UserMasterId})"></a>
但是修复动作,你的动作不是MVC风格,应该是
[Route("{userMasterId?}")]
public ActionResult getDetails(int? userMasterId)
{
...Some Code
}
但是名称并不重要,重要的是路由参数和动作参数名称应该相同,你也可以使用这个
[Route("{id?}")]
public ActionResult getDetails(int? id)
{
...Some Code
}
根据所有建议,在实施这些建议后,我决定在 link 和操作方法参数名称中,如果您使用默认路由器中建议的相同参数名称,URL 将生成作为
ControllerName/actionMthod/value
在所有其他情况下它将生成
ControllerName/actionMthod?ParamerName=value.
我正在编写我的第一个 MVC 应用程序。在创建 link 以打开详细信息视图时,我必须传递 id。
控制器方法如下:
public ActionResult getDetails(int UserMasetrId)
{
...Some Code
}
在 VIEW link 中生成如下:
<a title="View Details" href="@Url.Action("getDetails", "UserMaster", new {id=item.UserMasterId})"></a>
对于上面的代码 link 生成为 ...controllername/getDetails/13616
。但它抛出错误:
"The parameters dictionary contains a null entry for parameter 'UserMasterId' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult getDetails(Int32)' in 'APP.Controllers.UserMasterController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter."
现在,如果我按如下方式更改操作 link?
<a title="View Details" href="@Url.Action("getDetails", "UserMaster", new {UserMasterId=item.UserMasterId})"></a>
它工作正常但 link 更改为 ...controllername/getDetails?UserMasterId=13616
所以请建议任何参数名称的解决方案,因为我在操作方法中写了,我希望 url 的格式不显示参数名称意味着 url 的格式应该 conrtoller/actionmethod/parametervalue
。
函数中的参数名称应与按钮中的查询参数匹配 link。
<a title="View Details" href="@Url.Action("getDetails", "UserMaster", new { UserMasterId = item.UserMasterId})"></a>
如果您不使用默认 Id
参数,您还应该声明一个路由。
[Route("ControllerName/getDetails/{UserMasterId}")]
public ActionResult getDetails(int? UserMasterId)
{
if (id == null)
{
return NotFound();
}
}
您使用的不是ActionLink
。您正在为您的 href
操作生成一个 link。您可以使用 HtmlHelper 生成适当的 a
标记:Html.ActionLink
如下所示:
Html.ActionLink("", "getDetails", "UserMaster", new { item.UserMasterId }, null)
假设 item.UserMasterId
为 1:
<a href="/UserMaster/getDetails/1"></a>
并将您的 Controller
方法更改为:
public ActionResult getDetails(int? id)
{
...Some Code
}
如果你刚开始学习MVC,最好是学对了。您应该使用 Route 参数,而不是 QueryString 参数。所以让你的link保持原样
<a title="View Details" href="@Url.Action("getDetails", "UserMaster", new {id=item.UserMasterId})"></a>
但是修复动作,你的动作不是MVC风格,应该是
[Route("{userMasterId?}")]
public ActionResult getDetails(int? userMasterId)
{
...Some Code
}
但是名称并不重要,重要的是路由参数和动作参数名称应该相同,你也可以使用这个
[Route("{id?}")]
public ActionResult getDetails(int? id)
{
...Some Code
}
根据所有建议,在实施这些建议后,我决定在 link 和操作方法参数名称中,如果您使用默认路由器中建议的相同参数名称,URL 将生成作为
ControllerName/actionMthod/value
在所有其他情况下它将生成 ControllerName/actionMthod?ParamerName=value.