2015-09-16 65 views
2

在我问我的问题之前,让我说我DID看起来在线,并且我为这个问题寻找堆栈溢出,DID找到某些解决方案,但没有找到我找到的工作。所以我在这里问希望得到这个问题的答案,并感谢任何帮助。BeginForm更改“名称”值

我正在做一个表单发布到外部网站。在我的模型我在我的LoginViewModel执行以下操作创建的所有值:

public string returnurl { get; set; } 

在我的构造函数中我设置需要像这样的价值观:

returnurl = "www.retururl.com"; 

在我的索引我页面后像所以用MVC 4.0剃刀:

@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和名称变量returnurl的名称。

我的问题是,我的表单中的一个名称值必须是“bb-post”。我显然不能在我的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" }) 

谢谢。

+0

可能重复的[ASP.NET MVC 4重写发射的html名称和id](http://stackoverflow.com/questions/14810100/asp-net-mvc-4-override-emitted-html-名称和编号) – James

+0

你不需要在设置名称时使用@只需使用'new {Name =“bb-post”})' – JamieD77

+0

问题中接受的答案实际上是错误的,我在尝试后意外跳过了它它并没有工作。下面的答案尽管@James工作,我编辑我的问题提供的信息。 – Fro1

回答

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">

所以,如果你设置@Name大写 'N'和id,它的工作原理..如果我没有设置id,它需要原始值bb_post为id ...但@大写字母N似乎工作...

编辑: 所以显然它似乎工作,因为Chrome清理html。但根据this answer by nemesv,你是关闭使用@ Html.Hidden在@ Html.Hiddenfor更好,就像这样:

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

因为Html.Hiddenfor试图从你的模型,这是什么使得它不同的占卜name属性从Html.Hidden

+0

我刚刚尝试过,虽然它将ID更改为“bb-post”,而Name =“bb-post”,但仍然有一个名称=“bb_post”。所以现在有两个Name值分别是小写字母和大写字母。 – Fro1

+0

@ Fro1好吧对我来说,它似乎工作,但显然这是一个行为的铬清理的HTML ..这个答案由nemesv给出了更详细的解释:http://stackoverflow.com/a/14810169/2422173 .. 希望这有助于! –

+0

是的,这是为我工作的。谢谢! – Fro1

1

有什么不好做

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

那么我正在做一个大约20个输入的帖子,我正在做的所有格式是这样的:@ Html.HiddenFor(model => model.appName) @ Html.HiddenFor(model => model。 (模型=> model.astros) @ Html.HiddenFor(model => model.returnurl) @ Html.HiddenFor(model =>) model.texans2) @ Html.HiddenFor(model => model.astros2) @ Html.HiddenFor(model => model.rockets2) 有没有什么问题,我想保持一切? – Fro1

+0

我其实在我的帖子中说过,我希望它们都保持不变。如果这是不可能的,那么我会这样做。 – Fro1

+0

@AndreiM是的,它是一个可行的解决方案。这可能不是OP想要的解决方案,但它是一个完全相同的解决方案。 – James