【问题标题】:ASP.NET MVC2 textarea in form which binds model value but prevents postbackASP.NET MVC2 textarea 形式绑定模​​型值但防止回发
【发布时间】:2013-06-03 15:57:38
【问题描述】:

我有一个页面有两个用途,主要是查看数据库中的条目,但有些字段显示在 textfields/textareas 中,因为您可以编辑一些值,然后根据您在底部选择的按钮,您可以更新这些条目。我特别喜欢 textarea,因为它的外观/感觉,在页面中自然可调整大小,并带有标准的右键单击选项,如 SelectAll 等。感谢浏览器支持。

无论如何,其中一个字段(显示在文本区域中)我想防止在回发时通过,因为该值不会被编辑(我什至将其设为 @readonly,所以你不能甚至编辑文本区域)。

如何防止来自 ASPX 页面的输入的表单回发?我知道这通常是违反直觉的,但我认为也许有一种类似于隐藏输入的方法。另外,我知道在控制器中我可以在对从表单提交的模型执行任何操作之前擦除模型中的该字段,但我很好奇页面中是否有一些我可以做的选项。

我正在使用这种语法来定义文本区域:

<%: Html.TextAreaFor(model => model.Key, new { @readonly = "readonly", @class = "readonly", cols = 62, rows = 15 })%>

编辑
我可能应该注意到我需要这样做的主要原因之一是因为其中一个模型字段可能包含一些 HTML。这是一个内部网站,该字段不能手动编辑,所以没有人可以输入 HTML,它只是来自许可证生成程序的数据库中的一个值。因此,当我在绑定到模型字段的表单中使用 TextArea 时,ASP.NET 在将 TextArea 数据绑定回模型以在回发时发送时抛出异常。

我看到了使用 [AllowHtml] 和 [ValidateInput(false)] 属性的 SO 答案,一个在 MVC2 中对我不可用,另一个需要降级 requestValidationMode,所以我正在寻找一种替代方法来防止可能HTML 值根本不会被回发(但仍显示在文本区域中)。

【问题讨论】:

    标签: asp.net asp.net-mvc-2 forms http-post


    【解决方案1】:

    我通过在 jQuery 中处理表单提交事件来实现这一点:

    <script type="text/javascript">
        $(document).ready(function ()
        {
            // clear key area upon form post, because old keys contain HTML tags,
            // which cause an exception during model binding when form validation is on
            $("form").submit(function()
            {
                $("#keyArea").val("");
            });
        });
    </script>
    

    基本上只是在 textarea 绑定到模型并发布之前清除它。这样我仍然可以使用 textarea 来显示模型值,并简单地防止它返回到帖子中。

    唯一的小问题是,如果帖子将用户分流到另一个页面(可能),那么当用户按下返回按钮时,文本区域将为空白。但是一个简单的页面刷新解决了这个问题。

    【讨论】:

      猜你喜欢
      • 2011-03-20
      • 2013-09-12
      • 2011-01-21
      • 1970-01-01
      • 2011-06-29
      • 2011-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多