成功调用ajax后更改@ Html.DisplayFor项

时间:2014-04-17 18:00:59

标签: javascript jquery asp.net ajax asp.net-mvc

因此标题几乎说明了我要做的事情,我很确定我的路径是正确的,或者至少我是这么认为的。但是在重新加载整个视图之前,该值不会更新

HTML:

<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.Name)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.AktivBalance)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.BarBalance)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.HasAllInclusive)
        </th>
        <th></th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Name)
        </td>
        <td>
            <span class="changeaktbalance">
                @Html.DisplayFor(modelItem => item.AktivBalance)
            </span>
            <br />
            <input style="width: 42%;" type="text" name="aktivAmount" class="viewedittext" />
            <br />
            <input type="button" value="Indsæt" class="vieweditaddaktiv" data-childid="@item.ChildId" />
            <input type="button" value="Fratræk" class="vieweditsubaktiv" data-childid="@item.ChildId" />
            <br />
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.BarBalance)   
            <br />         
            <input style="width: 42%;" type="text" name="aktivAmount" class="viewedittext" />
             <br />
             <input type="button" value="Indsæt" class="vieweditaddbar" data-childid="@item.ChildId" />
             <input type="button" value="Fratræk" class="vieweditsubbar" data-childid="@item.ChildId" />            
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.HasAllInclusive)
        </td>
        <td>
            @Html.ActionLink("Rediger", "Edit", new { id=item.ChildId }) |
            @Html.ActionLink("Detaljer", "Details", new { id=item.ChildId }) |
            @Html.ActionLink("Slet", "Delete", new { id=item.ChildId })
        </td>
    </tr>
}

</table>

脚本:

<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script type="text/javascript">
    // document ready
    $(document).ready(function() {


        $(document.body).on("click", ".vieweditaddaktiv", function () {
            // test for at se om den får fat i de rigtige værdier, hvilket den gør.
            //alert("amount = " + $(this).parent().children(".viewedittext").val() + " id = " + $(this).data("childid") + ".");

            // værdierns sti bruges til at lave data variablen der skal videresendes. (ifølge vs bruger jeg nu de rette naming conventions i controlleren)
            var data = {
                Amount: $(this).parent().children(".viewedittext").val(),
                Id: $(this).data("childid")
            };

            // Jeg kan ikke sætte breakpoint og teste koden, der sker bare ingenting? Hvorfor virker intet herfra?
            $.ajax({
                type: 'POST',
                url: "@Url.Action("AddAktiv", "Default1")", // kalder på metoden der returnerer Json resultatet i controlleren.
                data: JSON.stringify(data),
                dataType: 'json',
                contentType: "application/json; charset=utf-8",
                success: function(returnedData) {
                    //alert(returnedData);
                    $(this).parent().children(".changeaktbalance").html(returnedData);

                },
                error: function() {
                    alert("An unexpected error has occured.");
                }
            });



        }); // End of vieweditaddaktiv.



    }); // End of document ready function.


</script>

我只需要按钮的父目录中的特定displayfor来触发脚本,所以我需要更改ajax调用成功场景中的代码,但我不确定如何?

1 个答案:

答案 0 :(得分:2)

this成功处理程序中的

jquery.ajax指向当前请求的ajax设置对象。如果您想用它来引用其他任何内容 - 请使用context选项:

$.ajax({
    context: this,
    // rest of your code goes here

这样,您在成功处理程序中使用的选择器应该可以正常工作