为什么 Url.RouteUrl 没有为其中有约束的路由生成地址
Why is Url.RouteUrl not generating address for a route that has contraint in it
我的控制器中有一个动作,它有一个路由约束以确保传入一个 ID。当这个约束在路由中时,@Url.RouteUrl()
不会为路线,如果我删除约束 URL 生成没有问题。这是 .Net 5 中的错误还是我做错了什么?
我尝试了以下方法来生成 URL:
@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>
在你的属性路由定义中,你说 VersoionID
应该是 int
类型。
因此生成正确的 url。
var v1= '@Url.Action("AboutVersion", "Home",new { VersionID =2})';
alert(v1);
但这不会
var v2 = '@Url.Action("AboutVersion", "Home")';
alert(v2);
因此,如果您将 VersionID
参数类型从 Int
更改为 Nullable Int
,它将适用于我们上面使用的 Url.Action
的两个重载。
[Route("About/{VersionID:int?}", Name = "AboutVersion")]
public JsonResult AboutVersion(byte VersionID)
{
// return something
}
您需要确保您的操作方法参数和属性路由定义中 url 模式中的参数应该匹配。 (您在问题中发布的代码中没有)
此外,如果您不使用属性路由装饰器,您的代码将适用于两种重载。
我的控制器中有一个动作,它有一个路由约束以确保传入一个 ID。当这个约束在路由中时,@Url.RouteUrl()
不会为路线,如果我删除约束 URL 生成没有问题。这是 .Net 5 中的错误还是我做错了什么?
我尝试了以下方法来生成 URL:
@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>
在你的属性路由定义中,你说 VersoionID
应该是 int
类型。
因此生成正确的 url。
var v1= '@Url.Action("AboutVersion", "Home",new { VersionID =2})';
alert(v1);
但这不会
var v2 = '@Url.Action("AboutVersion", "Home")';
alert(v2);
因此,如果您将 VersionID
参数类型从 Int
更改为 Nullable Int
,它将适用于我们上面使用的 Url.Action
的两个重载。
[Route("About/{VersionID:int?}", Name = "AboutVersion")]
public JsonResult AboutVersion(byte VersionID)
{
// return something
}
您需要确保您的操作方法参数和属性路由定义中 url 模式中的参数应该匹配。 (您在问题中发布的代码中没有)
此外,如果您不使用属性路由装饰器,您的代码将适用于两种重载。