隐藏的div标签与隐藏的输入字段在asp.net mvc 3网站中存储客户端数据?

时间:2011-12-29 14:22:26

标签: html asp.net-mvc-3

我们有一个ASP.net MVC 3网站。我们必须在客户端的隐藏字段中存储许多值,这些值需要稍后使用AJAX发布。出于某种原因,我一直在使用隐藏的div标签而不是隐藏的输入字段,认为它有一些性能提升。

<style>
.displaynone { display : none }
</style>

<div id="fld1" class="displaynone">Product Name</div>
<div id="fld2" class="displaynone">123 $</div>
<div id="fld3" class="displaynone">Catalog</div>

关于什么是正确/最佳方式的任何建议?

更新 虽然我得到了我的答案 - 语义上隐藏的字段是正确的,添加细节以获得更多的想法。

我们有每页N个项目的列表,每个项目都有一些信息显示在UI上。根据用户操作,我们必须将所选项目的所有数据添加到另一个数据库表中。由于我们已经在UI上拥有了大部分数据,因此我们决定将每个项目的一些附加内容作为隐藏字段,并将所有数据发布,而不是再次从数据库中获取数据。

Point1-我们可以为每个项目制作一个FORM,其中包含所有需要POST的数据,但是我们使用常用的Javascript函数为用户选择的项目POST数据。

var fld1Val = $('fld1' + itemNo).text();

Point2-所以我们在FORM之外的每个项目上都有一组隐藏的div标签(如上所述)。

  1. @ darin-dimitrov:如果我们每页有很多项目,每个项目会有一个不同的FORM id比使用AJAX POST数据的常用函数更好吗?

  2. @awrigley:如果隐藏的输入标签在FORM之外没有任何意义(语义),在我的情况下,它们是否仍然是隐藏div的更好选择?

  3. 现在

4 个答案:

答案 0 :(得分:3)

隐藏字段似乎在语义上更正确。您只需通过一次$('#someForm').serialize()调用序列化整个表单并将其发送到服务器:

@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "myForm" }))
{
    @Html.HiddenFor(x => x.ProductName)
    @Html.HiddenFor(x => x.Price)
    @Html.HiddenFor(x => x.Catalog)
}

然后:

var form = $('#myForm');
$.ajax({
    url: form.attr('action'),
    type: form.attr('method'),
    data: form.serialize(),
    success: function(result) {
        // TODO: do something with the results sent by the server
    }
});

答案 1 :(得分:0)

我建议隐藏输入是一种更好的方法,只是因为样式表可以轻松禁用,显示隐藏的div信息。此外,它似乎在语义上更正确。

答案 2 :(得分:0)

输入标签用于输入ehrmmm。 Div标签用于构建内容。隐藏的输入具有意义(语义),隐藏的div不具有意义。

不同之处在于,为隐藏输入赋予意义,您应该使用表单标记将它们包围起来。除了表单标签所包含的html之外,它们没有任何意义。

你不必说得对,但你必须,imo,写出正确的HTML。

答案 3 :(得分:0)

将这些数据放入脚本元素中的JSON对象中有很多要说的。如果您需要此信息的唯一原因是使用JavaScript,那么将该信息存储在JavaScript中最适合封装模式。