如果我正在使用Ajax.ActionLink帮助程序,并且我需要将几个参数传递给控制器操作,那么如何获取未绑定到模型的TextArea的值?
例如,我希望用户填写textarea,然后单击“保存”,将textarea值发送到控制器操作以进行进一步处理。
我使用ViewBag吗?如果是这样,我如何将DOM元素的值分配给ViewBag?
答案 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
内部使用名称为ta
和Ajax.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提交回您的操作。