无法从通过ajax呈现的局部视图中调用控制器操作

时间:2014-02-25 04:32:32

标签: model-view-controller view controller partial

我有以下设置:

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>
} 

此部分视图还需要访问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动作根本就没有被击中..

我认为这是我如何呈现Partial的某种问题,但无法弄清楚是什么。希望有人能提供线索。对于此设置是否最佳或我需要更改的任何建议感到高兴。

1 个答案:

答案 0 :(得分:0)

您只需更改

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

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

在部分视图中,一切都会好的。