繁体   English   中英

ajax.actionlink调用控制器动作

[英]ajax.actionlink calling a controller action

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

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

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

我以前玩过这个问题,你可以使用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)

您需要在Ajax.BeginForm()中使用名称为Nameta的Html元素。

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

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

或者您可以使用@Html帮助程序。

@Html.Editor("Name")

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM