MVC 3在动作之间传递变量

时间:2012-04-14 22:54:04

标签: html asp.net-mvc-3

我正在开发一个我需要在操作之间传递变量的网站。变量实际上是input个字段。这是一些示例标记。

<table>
    <tr>
        <td><input type="checkbox" name="major/1" value="1" checked /></td>
    </tr>
    <tr>
        <td><input type="radio" name="major/2" value="1" checked /></td>
        <td><input type="radio" name="major/2" value="2" /></td>
    </tr>
</table>

<a href="/NextPage/2/2">Next Page</a>

我基本上想要通过分页系统传递的值,以便最终可以使用它们。我怎么能做到这一点?最好不要使用围绕整个页面的表格。

3 个答案:

答案 0 :(得分:1)

将输入表单元素从一个页面传递到另一个页面的唯一方法是通过表单发布。您当然可以通过会话或类似方式传递数据,但这并不是在表单元素中传递它们。

我不明白你不愿意使用表格。隐藏字段是表单元素。它们用于表格。这是他们的目的。您想使用表单元素但不使用表单吗?这是毫无意义的。

编辑:

我认为您的问题是您并不真正理解浏览器和服务器的工作方式。它们只通过get和post命令进行通信。因此,将输入发送到服务器的唯一方法是通过帖子,帖子必须包含表单。这就是浏览器发送数据的方式。

你可以通过javascript做很多事情,但所有这些事情都比你发帖更麻烦。

答案 1 :(得分:0)

我可以看到两种可能的方法。首先,在回发表单中使用隐藏的输入字段。这将确保当前迭代中的变量在回发时保存到模型中:

@Html.HiddenFor(model=>model.Field1)

第二种方法是在控制器端保存TempData所需的一切,并在下一次回发时检索它:

TempData["tempkey"] = MyModel;

我认为最佳解决方案是否是其中之一(或其他)取决于您的模型和控制器逻辑是什么样的。

答案 2 :(得分:0)

在不使用表单的情况下完成此操作的最简单方法是使用jQuery或javascript来获取值并将它们作为url变量追加,假设这是一种可接受的方法。另一种方法是捕获值,通过ajax提前发送它们,并让你的后端在跟踪链接之前将它们存储为会话变量首先,给链接一个类名来听...

$('.navigation').on('click', '.pagelink', function(e){
    e.preventDefault();

    // url variables method
    var theUrl = ($(this).attr('href')) + '?';
    var ajaxUrl = $(this).attr('href');

    // needed for ajax method
    var theVals = new Object();
    $.each('table input', function() {
        // needed for ajax method
        var theName = $(this).attr('name');
        theVals[theName] = $(this).val();
        // url variables method
        theUrl = theUrl + theName + '=' + $(this).val() + '&';
    });
    // url variables method
    theUrl = theUrl.substr(0, theUrl.length - 2);// removes ending ampersand
    window.location = theUrl;

    // the ajax session method
    $.ajax({
        url : [MVC path to store session variables - ex: /ajax/setsession/],
        type : 'POST',
        data : theVals,
        success : function(data) {
            if(data) {
                // do something with data, like display success message
                window.location = ajaxUrl;
            }
        }
    });