我的控制器中有一个操作,它有一个路由约束以确保传入ID。当此约束在路由中时,@Url.RouteUrl()
不会为路由生成URL,如果我删除了约束生成的URL没有问题。这是.Net 5中的错误还是我做错了什么?
我已尝试以下方法生成网址:
@Url.RouteUrl("AboutVersion")
@Url.RouteUrl("AboutVersion", new { id = 1 })
@Url.Action("AboutVersion", "Home")
@Url.Action("AboutVersion")
@Url.Action("AboutVersion", new { id = 1 })
动作:
[Route("About/{Version:int}", Name = "AboutVersion")]
public JsonResult AboutVersion(byte VersionID)
{
var VersionNotes = _DbContext.ReleaseNotes
.Where(rn => rn.ReleaseVersionID == VersionID)
.Select(rn => rn.Note)
.ToList();
return Json(VersionNotes);
}
编辑: 这段代码:
<script type="text/javascript">
$(function ()
{
$('#SelectedVersionID').change(function ()
{
var SelectedVersionID = $(this).val();
var ReleaseNotesSection = $('#ReleaseNotes');
$.ajax({
cache: false,
type: "GET",
url: '@Url.Action("AboutVersion", "Home", new { VersionID = 1 })',
data: { 'VersionID': SelectedVersionID },
success: function (data)
{
alert('@Url.Action("AboutVersion", "Home")');
ReleaseNotesSection.html('');
$.each(data, function (note)
{
ReleaseNotesSection.append($('<li></li>').html(note));
});
},
error: function (xhr, ajaxOptions, thrownError)
{
alert('Error');
}
});
});
});
</script>
生成此输出:
<script type="text/javascript">
$(function ()
{
$('#SelectedVersionID').change(function ()
{
var SelectedVersionID = $(this).val();
var ReleaseNotesSection = $('#ReleaseNotes');
$.ajax({
cache: false,
type: "GET",
url: '',
data: { 'VersionID': SelectedVersionID },
success: function (data)
{
alert('');
ReleaseNotesSection.html('');
$.each(data, function (note)
{
ReleaseNotesSection.append($('<li></li>').html(note));
});
},
error: function (xhr, ajaxOptions, thrownError)
{
alert('Error');
}
});
});
});
</script>
答案 0 :(得分:4)
在属性路线定义中,您说VersoionID
应为int
类型。
这样就生成了正确的网址。
var v1= '@Url.Action("AboutVersion", "Home",new { VersionID =2})';
alert(v1);
但这不会
var v2 = '@Url.Action("AboutVersion", "Home")';
alert(v2);
因此,如果您将VersionID
param类型从Int
更改为Nullable Int
,那么它将适用于我们上面使用的Url.Action
的重载。
[Route("About/{VersionID:int?}", Name = "AboutVersion")]
public JsonResult AboutVersion(byte VersionID)
{
// return something
}
您需要确保属性路由定义中的url模式中的action方法参数和param应该匹配。 (它不在您在问题中发布的代码中)
此外,如果您不使用属性路径修饰符,您的代码将适用于两个重载。