将隐藏字段传递给显示模式对话框的asp-controller操作(asp.net core)

时间:2017-06-22 15:04:05

标签: asp.net asp.net-mvc razor asp.net-core

在我的代码中,我试图用一些参数调用一个asp控制器动作。此控制器操作将部分视图显示为模态对话框。查看代码:

06-23 02:41:17.589 23924-23924/? W/Bundle: Key android.intent.extra.STREAM expected ArrayList but value was a android.net.Uri$StringUri.  The default value <null> was returned.
06-23 02:41:17.659 23924-23924/? W/Bundle: Attempt to cast generated internal exception:
                                           java.lang.ClassCastException: android.net.Uri$StringUri cannot be cast to java.util.ArrayList
                                               at android.os.Bundle.getParcelableArrayList(Bundle.java:838)
                                               at android.content.Intent.getParcelableArrayListExtra(Intent.java:5481)
                                               at com.whatsapp.ContactPicker.k(ContactPicker.java:623)
                                               at com.whatsapp.ContactPicker.onCreate(ContactPicker.java:338)
                                               at android.app.Activity.performCreate(Activity.java:6367)
                                               at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1110)
                                               at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2404)
                                               at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2511)
                                               at android.app.ActivityThread.access$900(ActivityThread.java:165)
                                               at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1375)
                                               at android.os.Handler.dispatchMessage(Handler.java:102)
                                               at android.os.Looper.loop(Looper.java:150)
                                               at android.app.ActivityThread.main(ActivityThread.java:5621)
                                               at java.lang.reflect.Method.invoke(Native Method)
                                               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
                                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684)

我的控制器操作签名:

  <div style="float: right">
            <a asp-controller="MyController" asp-action="MyAction" asp-route-projectId="@Model.ProjectId" asp-route-tag="@Model.Tag" data-target="#modal-container" data-toggle="modal">Execute</a>
        </div>

现在我还想要包含一个隐藏字段,并将其作为参数传递给我的控制器。

public async Task<ActionResult> MyAction(int projectId, string tag)

这样做的语法是什么?我试图通过在顶部包含一个隐藏字段并进行表单提交来解决这个问题(将视图模型传递给我的控制器签名)但不幸的是,这使得我的模态对话框显示为一个完整的页面,而不是模态对话框。

1 个答案:

答案 0 :(得分:0)

您依赖于Bootstrap模式的“远程”功能,实际上已弃用。从本质上讲,目前发生的事情是Bootstrap正在识别模态激活链接有一个href到另一个页面,所以它实际上是为该URL执行一个AJAX请求并将它加载到模态的主体中。因为这是自动发生的,所以您无法控制(传入隐藏字段值或其他任何内容),并且如前所述,您依赖于已弃用的功能,可以在任何后续版本的Bootstrap中删除。此外,Bootstrap只会在第一次显示模态时加载远程内容。因此,如果隐藏的输入在事后发生变化,则不会根据该内容检索新的内容。

多长时间,您应该使用自己的JavaScript自行处理。

$('#modal-container').on('show.bs.modal', function (e) {
    var $modal = $(this);
    $.get(e.relatedTarget.href, {
        MyHiddenFieldName: $('#MyHiddenField').val()
    }, function (html) {
        $modal.find('.modal-content').html(html);
    });
});