如何传递两个模型值& mvc中控制器的文本值?

时间:2011-10-22 17:07:33

标签: asp.net-mvc-3 view razor

我想将两个值从视图传递给控制器​​。即,@ Model.idText和文本框中的值。这是我的代码:

    @using HTML.BeginForm("SaveData","Profile",FormMethod.Post)
    {
    <a href="someLink">@Model.idText</a>
    <input type="text" name="textValue"/>
    <input type="submit" name="btnSubmit"/>
    }

但问题是如果我使用“Url.ActionLink()我可以获得@ Model.idText。通过post action我可以使用FormCollection获取文本框值。但是我需要获得这个值的任何一个post或ActionLink

5 个答案:

答案 0 :(得分:2)

使用ajax你可以实现这个目的: 不要使用表格和在标签中声明您的属性:

<a href="someLink">@Model.idText</a>
<input type="text" id="textValue"/>
<input type="submit" id="btnSubmit"/>

jquery的:

    $(function (e) {
        //    Insert
        $("#btnSubmit").click(function () {

            $.ajax({
                url: "some url path",
                type: 'POST',
                data: { textField: $('#textValue').val(), idField: '@Model.idText' },
                success: function (result) {
                    //some code if success
                },
                error: function () {
                    //some code if failed
                }
            });
            return false;
        });
      });

希望这会有所帮助。

答案 1 :(得分:1)

@using HTML.BeginForm("SaveData","Profile",FormMethod.Post)
{
   @Html.Hidden("idText", Model.idText)
   @Html.TextBox("textValue")

   <input type="submit" value="Submit"/>
}

在您的控制器中

public ActionResult SaveData(String idText, String textValue)
{
   return null;
}

我不确定您正在努力解决哪个部分 - 向控制器提交多个值,或者让模型绑定工作,以便您提交的值显示为您的操作的参数。如果你提供更多你想要达到的细节,我会相应地修改我的答案。

答案 2 :(得分:0)

您可以在表单中使用隐藏字段 - 例如

@Html.Hidden("idText", Model.idText)

答案 3 :(得分:0)

在global.asax中创建一个规则,然后使用

编译你的params
@Html.ActionLink("My text", Action, Controller, new { id = Model.IdText, text =Model.TextValue})

请务必对textvalue进行编码,因为它可能包含无效字符

答案 4 :(得分:0)

基本上,您希望让ModelBinder为您执行此操作。要做到这一点,您需要在控制器中编写您的操作,其参数与您要传递给它的数据相匹配。所以,首先,Iridio的建议是正确的,尽管不是完整的故事。您的观点应如下所示:

@using HTML.BeginForm("SaveData","Profile",FormMethod.Post)
{
@Html.ActionLink("My text", MyOtherAction, MaybeMyOtherController, new { id = Model.IdText}) // along the lines of dommer's suggestion...
<input type="text" name="textValue"/>
<input type="submit" name="btnSubmit"/>
@Html.Hidden("idText", Model.idText)
}

请注意,我已添加了@ Html.Hidden帮助程序,以便为该字段添加该值的隐藏输入字段。这样,模型绑定器就能找到这个数据。请注意,Html.Hidden帮助程序放在表单的WITHIN中,以便在单击提交按钮时将此数据发布到服务器。

另请注意,我已添加了dommer对操作链接的建议并替换了您的代码。从您的问题来看,很难看出您是否正在考虑将数据传递给控制器​​,或者这只是代码中的另一部分功能。你可以这样做:拥有一个表单,或者只是拥有actionlink。没有意义的是两种方式都做,除非动作链接打算去其他地方...... ??!通过明确您的问题和样本,帮助我们帮助您。我认为dommer的答案是错误的,你没有声明TextValue作为模型的一部分传递给视图。看起来你想要的是用户将TextValue输入到视图中,而不是传入模型。与传入Model的idText不同。

无论如何,现在,您需要设置另一端,即为您的行动提供必要的

[HttpPost]
public ActionResult SaveData(int idText, string textValue) // assuming idText is an int
{
    // whatever you have to do, whatever you have to return...
}

@dommer似乎没有读过你的代码。但是,他建议使用Html.ActionLink帮助程序在代码中创建链接是一个很好的建议。你应该使用它,而不是你拥有的代码。

重述:

当您使用表单时,您将使用该表单将用户的输入发布到服务器。要获取使用Model传递到View的idText值,您需要使用Html.Hidden htmlhelper。这必须在表单内,以便它也发布到服务器。

要将表单帖子连接到您的操作方法,您需要提供ModelBinder可以匹配表单POST的值的操作参数。您可以使用每个参数的数据类型和匹配的名称来执行此操作。

你也可以有一个复杂的类型,例如公共类MyTextClass,它有两个公共属性:

public class MyTextClass
{
   public int idText{get;set}
   public string TextValue{get;set;}
}

然后在您的控制器操作中,您可以:

public ActionResult SaveData(MyTextClass myText)
{
   // do whatever
}

模型绑定器现在可以将发布的值与myText的公共属性进行匹配,所有这些都将在丹麦很好。

HTH。

PS:你还需要阅读一本关于MVC的好书。看来你有点失明。

另一个挑选是质疑你的行动名称SaveData。这听起来更像是一个存储库方法。在命名您的行为时,请像用户一样思考:她只是填写表单,她没有保存数据的概念。因此,操作应该是Create,或Edit,或InformationRequest,或更具说明性的内容。保存数据说没有关于保存什么数据。它可能是信用卡详细信息,或者是用户名和电话......