【问题标题】:Javascript Passing a Parameter to a ControllerJavascript 将参数传递给控制器
【发布时间】:2018-03-19 17:12:47
【问题描述】:

我正在尝试调用 propDetails 函数并将 ID 传递给它。然后将相同的 ID 传递给静态控制器,但我不断收到错误消息:“id = id”(第二个 ID 不存在)。

我很抱歉这个愚蠢的问题,我无法弄清楚我做错了什么......

function propDetails(id) {
    var $detailDiv = $('#detailsDiv'), url = $(this).data('url');

     $.get( '@Url.Action("PropDetails", "Static", new { id = id })', function(data) {
            $('#detailsDiv').html(data);
        });
}

任何指导将不胜感激。

【问题讨论】:

  • id 在您的 Razor 代码呈现时不可用。
  • 从长远来看,您可能希望呈现一个表单来序列化您的 id 作为请求的一部分,写为 $("form).serialize()。我原来的答案没有回答这个问题。
  • @Amy 谢谢Amy,上面的链接对我帮助很大!很酷的 JS 技巧!

标签: javascript asp.net model-view-controller


【解决方案1】:

id 变量在 Razor 助手中不可用,您可以做的是在 Url.Action 助手完成后连接 id

function propDetails(id) {
    var $detailDiv = $('#detailsDiv'), url = $(this).data('url');   
    $.get('@Url.Action("PropDetails", "Static")' + id, function(data) {
            $('#detailsDiv').html(data);
        });
}

【讨论】:

    【解决方案2】:

    从长远来看,您可能希望呈现一个表单来序列化您的 id 作为请求的一部分,写为$("form").serialize()。 将更多字段附加到使用复杂类型作为参数的操作要容易得多。您的新代码如下所示:

    $.get($detailDiv.find("form").attr("action"),$detailDiv.find("form").serialize(), function(data){
         $('detailsDiv').html(data);
    });
    

    您的表单对象将在 MVC 中的 HTTPGET 请求中创建,并使用您构建的 @Html.BeginForm() 帮助器返回视图,这是 detailsDiv 的 innerHtml 的一部分,然后可以使用 @987654324 对其进行序列化@

    我希望这很清楚并完全回答了如何解决问题。如果它偏离基础,我将进行修改,并为 Javascript 和 MVC 的混合添加更多混乱。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-14
      • 1970-01-01
      • 2015-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多