【问题标题】:@Html display for and hidden for giving different values@Html 显示和隐藏以提供不同的值
【发布时间】:2017-05-10 12:14:28
【问题描述】:

所以在我的编辑器模板中,我有以下内容:

<tr>
    <td style="padding-right: 10px;">
        @Html.CheckBoxFor(model => Model.IsSelected, new { @class = "CntIsSelected", @checked = Model.IsSelected })
    </td>
    <td style="padding-right: 10px;">
        @Html.DisplayFor(model => model.value)
        @Html.HiddenFor(model => model.value)
    </td>
    <td style="padding-right: 10px;">
        @Html.DisplayFor(model => model.totalCount)
    </td>
</tr>

它呈现的 HTML 是……

<tr>
    <td style="padding-right: 10px;">
        <input class="CntIsSelected" data-val="true" data-val-required="The IsSelected field is required." id="CountryCount_0__IsSelected" name="CountryCount[0].IsSelected" type="checkbox" value="true"><input name="CountryCount[0].IsSelected" type="hidden" value="false">
    </td>
    <td style="padding-right: 10px;">
        CN
        <input id="CountryCount_0__value" name="CountryCount[0].value" type="hidden" value="JP">
    </td>
    <td style="padding-right: 10px;">
        30
    </td>
</tr>

编辑器模板从 jquery 中获取数据。

<script type="text/javascript" name="SearchRecords_v1">
    function countryCounts(data) {
        $.ajax({
            url: "/Home/_CountryArea",
            type: "POST",
            data: data,
            success: function (partialViewResult) {
                $("#CountryArea").html(partialViewResult);
                CountryIsSelectedClick();
                console.log(partialViewResult);
                },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                alert('Country ERROR!');
            }

        })
    }
</script>

在第一次渲染时,“JP”在列表中是第一位的。页面上有一些选项会调用上面的 jquery 代码并将一些不同的参数传递给控制器​​,控制器将从 sql 中查找新列表。

return PartialView("_CountryCounts", model);

查看模型,它的值是 CN 传回的,而此列表中没有其他值(这是正确的)。

显示的显示的是 CN 的值(这是正确的),但隐藏的显示的是 JP 的国家代码,这是生成新列表之前的第一个值。

这就像新的列表值正在更新,但隐藏为没有。出于某种原因,它保留了旧值...

【问题讨论】:

  • JP 是 CN 之后数据集中的下一个元素吗?也值得在这里添加您的模型和控制器逻辑
  • 是的,也许不是那么简单,这些值实际上来自 ajax 调用。我会看看并发布
  • JP 是此示例列表中的第一个,如果有人从另一个列表中选择某些内容,它会触发 ajax 调用以获取新的国家数据并使用 $("#CountryArea").html(partialViewResult ) 将新数据传递给编辑器模板。看起来这并没有改变 Hidden for 的值
  • 抱歉,您的回复让我有点困惑。 '某人从另一个列表中选择了某些东西'是什么意思?
  • 页面上有一些复选框,如果用户选中一个,jquery 会将新参数发送回操作并从 sql 查询中获取不同的国家/地区计数。 return PartialView("_CountryCounts", model);作为回报,模型上有 CN 值,刚刚检查过......但是 $("#CountryArea").html(partialViewResult);正在显示 JP 值!

标签: c# razor model-view-controller mvc-editor-templates


【解决方案1】:

使用此方法,必须在控制器中清除模型状态。

ModelState.Clear()

或者因为它在一个列表中,如果你特别想清除它似乎

ModelState.Remove("CountryCount.value");会工作

https://weblog.west-wind.com/posts/2012/apr/20/aspnet-mvc-postbacks-and-htmlhelper-controls-ignoring-model-changes

【讨论】:

  • 这很有意义。您需要先清除模型,然后再向其添加更多数据。
猜你喜欢
  • 1970-01-01
  • 2023-03-07
  • 2020-04-25
  • 2013-08-03
  • 1970-01-01
  • 1970-01-01
  • 2021-03-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多