@Url.Action 在控制器中创建空值的参数之间添加 "amp;"?
@Url.Action adding "amp;" between parameters creating nulls in the controller?
我正在尝试通过 Url.Action.
发送多个参数
$('#dialog').dialog({
autoOpen: false,
width: 850,
height: 420,
resizable: false,
title: 'Vehicle details',
modal: true,
open: function (event, ui) {
$(this).load("@Url.Action("LightStoneRequest", new { registrationNumber = Model.VehicleRegistration, vinNumber = Model.vVinNumber })");
},
buttons: {
"Close": function () {
$(this).dialog("close");
}
}
});
在 运行 期间,它看起来如下:
$(this).load("/APQuotes/LightStoneRequest?registrationNumber=TE5TGP&vinNumber=VINTEST44889856");
如您所见,传递了一个 vin 号码,但它在我的控制器中为空。
这是我的模态。
public partial class LightStoneRequest
{
public LightStoneRequest()
{
this.LightStoneDataFields = new HashSet<LightStoneDataField>();
}
public int LightStoneRequestId { get; set; }
public string RegistrationNumber { get; set; }
public string VinNumber { get; set; }
public virtual ICollection<LightStoneDataField> LightStoneDataFields { get; set; }
}
如果我移除放大器;它有效,但是 URL.Action 添加了 amp;.
Url.Action
不是问题 - 问题在于您如何使用它。
您正在使用 @
- 这用于在 (X)HTML 页面中内联一段服务器端代码的结果。在 (X)HTML 页面中,实体必须正确编码,将您的 &
变成 &
。这是完全正确的行为 - 这就是它应该如何内联在文本或属性中,例如(这就是为什么你在 <a href="@...">
)中使用它的原因)。
但是,您尝试内联原始值,而不是编码值 - 因为您没有尝试发出 HTML,您发出的是原始文本。 Html.Raw
就是这样做的:
@Html.Raw(Url.Action("Test", new { arg1 = "Hi!", arg2 = "there." }))
我正在尝试通过 Url.Action.
发送多个参数$('#dialog').dialog({
autoOpen: false,
width: 850,
height: 420,
resizable: false,
title: 'Vehicle details',
modal: true,
open: function (event, ui) {
$(this).load("@Url.Action("LightStoneRequest", new { registrationNumber = Model.VehicleRegistration, vinNumber = Model.vVinNumber })");
},
buttons: {
"Close": function () {
$(this).dialog("close");
}
}
});
在 运行 期间,它看起来如下:
$(this).load("/APQuotes/LightStoneRequest?registrationNumber=TE5TGP&vinNumber=VINTEST44889856");
如您所见,传递了一个 vin 号码,但它在我的控制器中为空。
这是我的模态。
public partial class LightStoneRequest
{
public LightStoneRequest()
{
this.LightStoneDataFields = new HashSet<LightStoneDataField>();
}
public int LightStoneRequestId { get; set; }
public string RegistrationNumber { get; set; }
public string VinNumber { get; set; }
public virtual ICollection<LightStoneDataField> LightStoneDataFields { get; set; }
}
如果我移除放大器;它有效,但是 URL.Action 添加了 amp;.
Url.Action
不是问题 - 问题在于您如何使用它。
您正在使用 @
- 这用于在 (X)HTML 页面中内联一段服务器端代码的结果。在 (X)HTML 页面中,实体必须正确编码,将您的 &
变成 &
。这是完全正确的行为 - 这就是它应该如何内联在文本或属性中,例如(这就是为什么你在 <a href="@...">
)中使用它的原因)。
但是,您尝试内联原始值,而不是编码值 - 因为您没有尝试发出 HTML,您发出的是原始文本。 Html.Raw
就是这样做的:
@Html.Raw(Url.Action("Test", new { arg1 = "Hi!", arg2 = "there." }))