在PartialView Ajax调用期间,MVC3奇怪的隐藏值丢失

时间:2011-06-09 22:10:35

标签: asp.net-mvc-3 c#-4.0 razor

渲染局部视图时,我遇到了一个非常奇怪的问题。我的页面有一个表,其行使用局部视图呈现。这是一个片段

<td>
    <img src="@Url.Content("~/Content/Images/edit_icon.gif")" class="editLine" />
    <img src="@Url.Content("~/Content/Images/delete_icon.gif")" class="deleteLine" />
    @Html.HiddenFor(model => model.LineId)
</td>

首次加载页面时,这会呈现正常。输入标记的值设置为id。但是,当我执行ajax调用并从控制器返回PartialView时,此值始终为0.

控制器代码:

line.LineId = 12; //whatever the actual value is
return PartialView("Line", line);

jquery代码是

$.ajax({
        data: {
            Id: id
        },
        success: function (data, textStatus) {

           $('#lines').append(data);

        }

当我调试并查看时,我看到数据已经回来了

<input name="lineId" id="lineId" value="0" />

我通过EVERYTHING调试并且lineId不是0.然后我通过视图本身进行调试,每当我执行Html.Hidden(“lineId”,anyvalueHere)时,它呈现为0.当我将其更改为Html.Hidden( “lineId_”+ actualId,actualId)它的工作原理。

这是已知/预期的行为吗?我可以想象它没有与重复的id's jiving。但是,它在页面加载时渲染得很好,我使用完全相同的局部视图。客户端的东西是否有神奇的juju?我想象的不是因为它只是一个控制器动作而且它不知道其中的区别。有没有人见过这个。感谢

1 个答案:

答案 0 :(得分:3)

如果您在发布时更改了值,那就是问题所在。使用:

<input type='hidden' name='LineId' value='<%: Model.LineId %>'/>

而不是Html.HiddenFor。