ajax.actionlink调用控制器动作

时间:2012-06-27 15:54:23

标签: c# asp.net asp.net-mvc asp.net-mvc-3 asp.net-ajax

如果我正在使用Ajax.ActionLink帮助程序,并且我需要将几个参数传递给控制器​​操作,那么如何获取未绑定到模型的TextArea的值?

例如,我希望用户填写textarea,然后单击“保存”,将textarea值发送到控制器操作以进行进一步处理。

我使用ViewBag吗?如果是这样,我如何将DOM元素的值分配给ViewBag?

2 个答案:

答案 0 :(得分:3)

我以前玩过这个问题,你可以使用Ajax.BeginForm解决这个问题。

采取以下示例:

我有一个模型Person,即Name的一个字符串属性。

查看

@model Application.Models.Person

<fieldset>
    <legend>Form</legend>
    @using (Ajax.BeginForm("SendUp", "Home", new AjaxOptions
    {
        HttpMethod = "POST",
        OnComplete = "window.location.href = 'Index'"
    }))
    {  
        <p>
            @Html.LabelFor(model => model.Name)
            @Html.EditorFor(model => model.Name)
        </p>
        <p>
            @Html.TextArea("ta")
        </p>
        <p>
            <input type="submit" value="Submit" />
        </p>
    }
</fieldset>

<强>控制器

    [HttpPost]
    public ActionResult SendUp(string Name, string ta)
    {
        string s = ta;
        // Process stuff here
        // Go to another action or whatever
        return RedirectToAction("Index");
    }

使用Ajax.BeginForm()可以将数据发送到控制器,即使它未绑定到页面上的模型。您需要确保Html元素的name属性与控制器所需的参数名称相同。

所以如果你有

的控制器方法
public ActionResult SendUp(string Name, string ta)

您需要在Name内部使用名称为taAjax.BeginForm()的Html元素。

要做到这一点,你可以写出整个元素:

<input type="text" id="Name" name="Name" />

或者您可以使用@Html助手。

@Html.Editor("Name")

当您提供@Html帮助程序的名称时,它会将该值设置为id属性以及name属性。

答案 1 :(得分:1)

ViewBag是服务器端概念。一旦页面被渲染,它就不存在。 我不知道以声明方式将页面上的字段与动作参数链接起来。

要做你想做的事,你有两个选择: - 摆脱Ajax.ActionLink助手,写一些Javascript(对不起,Ican真的帮助你) - 使用Ajax.BeginForm代替并将相关字段放在表单中,以便单击提交按钮将表单通过ajax提交回您的操作。