@Url.Action 添加“amp;”在控制器中创建空值的参数之间?

Posted

技术标签:

【中文标题】@Url.Action 添加“amp;”在控制器中创建空值的参数之间?【英文标题】:@Url.Action adding "amp;" between parameters creating nulls in the controller? 【发布时间】:2016-02-02 10:26:17 【问题描述】:

我正在尝试通过 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;.

【问题讨论】:

这段代码应该可以正常工作。您确定使用完全相同的代码看到了奇怪的行为吗? @Shyju 没做任何改动,复制过去到问题区域并截图为证。 卢安给出的答案应该对你有用。 【参考方案1】:

Url.Action 不是问题 - 问题在于你如何使用它。

您正在使用@ - 这用于在 (X)html 页面中内联一段服务器端代码的结果。在 (X)HTML 页面中,实体必须正确编码,将您的 &amp;amp; 转换为 &amp;amp;。这是完全正确的行为 - 例如,这就是它应该在文本或属性中内联的方式(这就是您在例如&lt;a href="@..."&gt; 中使用它的原因)。

但是,您正在尝试内联原始值,而不是编码值 - 因为您不是在尝试发出 HTML,而是在发出原始文本。 Html.Raw 就是这样做的:

@Html.Raw(Url.Action("Test", new  arg1 = "Hi!", arg2 = "there." ))

【讨论】:

哦,我经历了这么多痛苦,终于来到了这里。 Ty 解释一下

以上是关于@Url.Action 添加“amp;”在控制器中创建空值的参数之间?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Url.Action 中发送多个参数?

Url.Action:如何将参数从视图传递到控制器?

控制器中的 Url.Action 两次生成端口

Url.Action 在我的 url 中放了一个 &,我该如何解决这个问题?

Url.Action 未输出自定义映射控制器路由

如何在 Url.Action 中传递区域?