我们有一个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标签(如上所述)。
@ darin-dimitrov:如果我们每页有很多项目,每个项目会有一个不同的FORM id比使用AJAX POST数据的常用函数更好吗?
@awrigley:如果隐藏的输入标签在FORM之外没有任何意义(语义),在我的情况下,它们是否仍然是隐藏div的更好选择?
现在
答案 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中最适合封装模式。