BeginForm改变"名称"值

时间:2015-09-16 14:35:16

标签: html asp.net-mvc asp.net-mvc-4 razor html.beginform

在我问我的问题之前,请让我说我在线看,我看到这个问题的堆栈溢出,DID找到了某些解决方案,但没有找到我的工作。所以我在这里要求希望得到这个问题的答案,并感谢任何帮助。

我正在向外部网站发帖子。在我的模型中,我通过在LoginViewModel中执行以下操作来创建所有值:

public string returnurl { get; set; }

在我的构造函数中,我设置了所需的值,如下所示:

returnurl = "www.retururl.com";

在我的索引页面中,我喜欢在MVC 4.0中使用Razor的帖子:

@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "myForm", @action = Model.loginUrl }))
{
   @Html.HiddenFor(model => model.returnurl)
}

当我查看提琴手时,它会在幕后进行以下操作:

<input id="returnurl" name="returnurl" type="hidden" value="www.returnurl.com">

它使输入id和name成为变量returnurl的名称。

我的问题是我的表单中的一个名称值必须是&#34; bb-post&#34;。我显然无法在我的loginViewModel中命名变量bb-post,所以我尝试的只是将名称设置为bb_post然后在我的索引页面中。

所以我做了以下事情:

@Html.HiddenFor(model => model.bb_post, new { name = "bb-post" })

但这不起作用,当我检查提琴手时,它做了以下事情:

<input id="bb_post" name="bb_post" type="hidden" value="" />

我也试过了:

@Html.HiddenFor(model => model.bb_post, new { @name = "bb-post" })

但得到了这个:

<input id="bb_post" name="bb_post" type="hidden" value="" />

最后尝试了这个:

@Html.HiddenFor(model => model.bb_post, new { @Name = "bb-post" })

但得到了这个:

<input Name="bb-post" id="bb_post" name="bb_post" Name="bb-post"  type="hidden" value="" />

使用大写名称@Name给我两个名称值。这不是我想要的。

我知道我可以直接用这种方式写入html:

<input id="bb_post" name="bb-post" type="hidden" value="" />

但是为了保持一切看起来一样,我希望有一种方法来保持这种格式:

@Html.HiddenFor(model => model.bb_post, new { @Name = "bb-post" })

谢谢。

修改 我确实在推荐的问题中找到了答案,但接受的答案是不正确的。我必须没有比错误接受的答案更进一步(我经常做并道歉)。但是如果其他人不小心跳过了这个问题的答案,那么以下是有效的,因为它会产生两个名称值,因为它接受了错误的答案。 这是正确答案,对我有用:

 @Html.Hidden("bb-post", Model.bb_post, new { id="bb-post" })

感谢。

2 个答案:

答案 0 :(得分:1)

做什么错误

<input id="bb-post" name="bb-post" type="hidden" value="@model.bb_post" />

答案 1 :(得分:0)

我刚刚尝试了以下内容:

@Html.HiddenFor(x => x.Client, new {id="bb-post", @Name = "bb-post"})

得到了这个结果     <input name="bb-post" id="bb-post" type="hidden" value="BDOObject.Client">

因此,如果您使用大写'N'和id设置@Name,它就可以工作..如果我没有设置id,则它需要原始值bb_post作为id ...但是@Name只有大写N工作......

修改 显然它似乎只是起作用,因为Chrome清理了html。但根据this answer by nemesv,你最好在@ Html.Hiddenfor上使用@ Html.Hidden,就像这样:

@Html.Hidden("bb-post", Model.bb_post, new { id="bb-post"})

因为Html.Hiddenfor试图从你的模型中划分name属性,这使得它与Html.Hidden不同