我想将两个值从视图传递给控制器。即,@ 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
答案 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,或更具说明性的内容。保存数据说没有关于保存什么数据。它可能是信用卡详细信息,或者是用户名和电话......