2010-11-25 73 views
1

我正在使用ASP.NET MVC制作网页。 我有以下输入隐藏definied:输入隐藏控件不会保留回发之间的值

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

而且我将其值设置在这个js功能:

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

后进行回发在js初始化函数,我想使用的值集在输入中隐藏但值是字符串空的。

$(document).ready(function() { 

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

任何人都可以提示为什么会发生这种情况吗?

+0

MVC不支持回传。这可能是问题的原因是什么?哪一个你使用的是WebForms还是MVC? – 2010-11-25 17:31:11

+0

当然可以,postback是一个标准的HTML操作,回传并不是web表单专有的,区别在于web表单回发包含一个叫做viewstate的隐藏字段,允许数据在回传中保留。另外,我相信他正在尝试在javascript中回传后读取数据。请参阅我的回答。 – Chev 2010-11-25 17:34:01

回答

2

您正试图在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. 
}