javascript - 有没有办法在部分 View 中获取 ajax 调用的 Controller 路径?

标签 javascript ajax asp.net-mvc partial-views

所以我有一个部分 View ,它只是一个小部件,允许用户选择日期并按日期过滤结果。这个部分 View 可以出现在很多页面上,所以我想完全解耦它并重用它。 我想添加事件监听器来提交日期部分 View 的任何形式。

在我的主视图中我有

@{using (Html.BeginForm("getActivityManagementTwoActivities", "CallCenter", FormMethod.Get, new { id = "ActivityTwoForm" }))
    {
        <div class="row ">
            <div class="col-md-12" style="float:right;">
                <div class="dateWrapper">@{ Html.RenderPartial("_DateFilter"); } </div>
            </div> 
            //... 
       @{ Html.RenderPartial("_ActivityManagementCollapseComponent", Model);
}

我的 Controller :

    public async Task<PartialViewResult> getActivityManagementTwoActivities(DateFilterModel filters, int results = 25)
    {
        var model = await GetFullAndPartialViewModel(filters, results);
        return PartialView("_ActivityManagementCollapseComponent", model);
    }

我的日期部分 View :

<div class="date-text-collapsible">
<form method="get">
    <table>
        <tr>
            <td style="text-align:right; vertical-align: top; width: 160px">
                Time filter:
            </td>
            <td style="display:inline-block; width:150px">
                <input id="radio1" name="radioToggle" type="radio"> Recent
                <select id="timeFilter" name="timeFilter" class="hokage">
                    <option value="Last 30 days">at least 18</option>
                </select>
                <br />
                <input id="radio2" name="radioToggle" class="radioTimeFilter" type="radio"> Date Range
                <div id="dateContent" class="radio-content" style="display:none;">
                    <input id="txtDateOneFilter" type="text" style="width: 80px;" placeholder="Start Date" name="dateStart" class="hokage" />&nbsp;to&nbsp;
                    <input id="txtDateTwoFilter" type="text" style="width: 80px;" placeholder="End Date" name="dateEnd" class="hokage" />
                </div>
                <br />
            </td>
        </tr>    
    </table>
</form>

我尝试通过这种方式添加事件监听器:

    var inputDateBoxes = document.getElementsByClassName("hokage");
    addOnChangeListenersToSubmit(inputDateBoxes);
    function addOnChangeListenersToSubmit(arrayOfElements) {
      for (var i = 0; i < arrayOfElements.length; i++) {
        arrayOfElements[i].addEventListener('change', function () {
          this.form.submit();
        })
      }
    }

但是这种方式失败了,它只返回部分 View 本身。我认为这不能是一个表单,我需要指定 ajax 或其他东西。如何从日期过滤器部分中更新部分 View ?

最佳答案

您可以使用一堆 razor 语法来获取 Controller 名称和操作名称:

string controllerName = this.ViewContext.RouteData.Values["controller"].ToString();        
string actionName = this.ViewContext.RouteData.Values["action"].ToString();

您可以从那里开始构建。

关于javascript - 有没有办法在部分 View 中获取 ajax 调用的 Controller 路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59546672/

相关文章:

javascript - 无法使用 Firebase 中的电子邮件链接重新进行身份验证

javascript - 将 .ajaxComplete() 与另一个框架生成的 ajax 请求一起使用

javascript - 使用 AJAX 在页面之间导航

c# - Office 365 客户端 API SendMailAsync 返回未经授权

c# - 我的 Controller 中的非静态字段、方法或属性需要对象引用

javascript - 图像上的折叠 Angular 也有阴影

javascript - 在 emberjs 中的 View 之间转换时如何处理取消/回滚

javascript - 如何在向 dom 元素添加类后强制 ie8 重新绘制

php - 登录表单运行脚本无需刷新页面,但成功后需要删除表单

asp.net - MVC 4 模型返回 null