【问题标题】:Input hidden control doesn´t keep the his value between postbacks输入隐藏控件不会在回发之间保持他的价值
【发布时间】:2010-11-25 17:17:20
【问题描述】:

我正在使用 ASP.NET MVC 制作网页。 我有以下隐藏定义的输入:

<%=Html.Hidden("inputHiddenSelectedMenuId") %>

我在这个js函数中设置了它的值:

function SetSelectedMenu(id) {
     $('#inputHiddenSelectedMenuId').val(id);         
 }

在 js init 函数中进行回发后,我想使用隐藏输入中设置的值,但该值为空字符串。

$(document).ready(function() {

     $('div.nav > a').removeClass('active');
     var id = $('#inputHiddenSelectedMenuId').val();
     if (id != "") {
         $("#" + id).addClass('active');
     }         
 });

谁能提示一下为什么会这样?

【问题讨论】:

  • MVC 不支持回发。这可能是问题的原因吗?您使用的是哪一个 - WebForms 或 MVC?
  • 当然可以。回发是一种标准的 HTML 操作。回发不是 Web 表单独有的。不同之处在于 Web 表单回发包含一个名为 viewstate 的隐藏字段,该字段允许数据在回发中保持不变。此外,我相信他正在尝试在 javascript 回发后读取数据。看我的回答。
  • 是否有理由在回发时重置该字段(在您的代码中)

标签: javascript asp.net html asp.net-mvc hidden-field


【解决方案1】:

您正在尝试在 javascript 中读取输入的值。当您单击表单上的按钮并执行回发时,您的页面正在重新加载,并且每次加载页面时 javascript 都会重新运行。如果您所做的只是读取 javascript 中输入的值,则无需执行回发。

$('#inputHiddenSelectedMenuId').bind('click', function ()
{
     var id = $('#inputHiddenSelectedMenuId').val();
     // do stuff with it.
});

点击功能将在没有回发的情况下执行。

现在,如果您在发布后尝试从 MVC 中读取隐藏字段的内容,那么这是一个不同的问题。您必须通过模型绑定从表单数据中提取它(或直接通过 Request.Form[] 集合读取它。

public ActionResult SomeActionToPostTo(int inputHiddenSelectedMenuId)
{
     //model binding should find the form field called inputHiddenSelectedMenuId and populate the argument in this method with it's value. If it's not an integer then just change the type of the argument to the appropriate type.
}

【讨论】:

  • 想要做的是在按下链接并进行回发后,将类设置为ID存储在隐藏字段中的链接
  • 在这种情况下,您需要做的是 A) 使用 ajax 执行回发。或者 B) 在 ViewData 集合中发回一些 javascript,然后您将在下次加载时以编程方式将其添加到视图中 (ViewData["someJavaScript"].ToString())
猜你喜欢
  • 2019-06-21
  • 2016-11-05
  • 1970-01-01
  • 1970-01-01
  • 2018-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多