【问题标题】:Unable to call controller action from a partial view rendered via ajax无法从通过 ajax 呈现的局部视图调用控制器操作
【发布时间】:2014-03-27 02:42:39
【问题描述】:

我有以下设置:

A) 父视图中的 HTML div 容器用于保存返回的部分视图:

<div id="divProjectCostList" class="tablecontainer">

</div>

B) 返回视图模型的控制器方法 -

    [HttpGet]
    public PartialViewResult GetProjectCostsById(int viewProjectId)
    {
        return PartialView("ProjectCost", GetProjectCostsViewModel(viewProjectId));  
    }

C) AJAX 将部分视图 HTML 渲染到上面的 div 中 -

$(document).ready(function () {

    $(".retProjTran").click(function () {

        var projectid = $(this).data("projectid");

        $.ajax({
            cache: false,
            asynch: true,
            type: "GET",
            url: "@(Url.Action("GetProjectCostsById", "Project"))",
            data: { "viewProjectId": projectid },
            success: function (retData) {
                $('#divProjectCostList').html(retData);
            }
        })
    });
})

上面的工作正常。

为了从返回的模型中获取元素并在表格中呈现这些元素而设置的部分视图

@using (Html.BeginForm("ProjectCostList", "Project", FormMethod.Get))
{
<table class="table table-striped table-bordered table-condensed table-hover">
    <tbody>
        @foreach (var item in Model)
        {
            <tr>
                <td>@Html.HiddenFor(modelItem => item.ProjectCostType)</td>
                <td>
                    @Html.ActionLink(item.ProjectCostType.ToString(), "", null,
                     new { @class = "retProjDetails", data_details = item.ProjectCostId })
                </td>
            </tr>
        }
    </tbody>
</table>
} 

这个Partial视图还需要访问一个JS方法-

$(".retProjDetails").click(function () {


        $.ajax({
            cache: false,
            asynch: true,
            type: "GET",
            url: "@(Url.Action("GetProjectCostDetails", "Project"))",
            data: { "viewProjectCostId": projectCostId },
            success: function (retData) {
            $('#divProjectCostList').html(retData);
            },
            error: function (xhr, ajaxOptions, thrownError) {
                alert(thrownError);
            }
        })
    });

我可以看到从渲染的 Actionlink 调用了 JS 函数,但是相关的 Controller 操作根本没有被命中..

我想这是我如何渲染部分的某种问题,但无法弄清楚是什么。希望有人可以提供线索。很高兴有任何关于此设置是否最佳或我需要更改的建议..

【问题讨论】:

标签: model-view-controller view controller partial


【解决方案1】:

你只需改变你的

@using (Html.BeginForm("ProjectCostList", "Project", FormMethod.Get)) 

@using (Html.BeginForm("ProjectCostList", "Project", FormMethod.Post))

在局部视图中,一切都会好起来的。

【讨论】:

  • 但是方法被指定为get。更改为帖子如何修复它?需要知道! :D
猜你喜欢
  • 2012-02-19
  • 2021-06-16
  • 1970-01-01
  • 1970-01-01
  • 2016-02-22
  • 1970-01-01
  • 2021-12-19
  • 2018-06-10
  • 1970-01-01
相关资源
最近更新 更多