Javascript :在 HTML 表单隐藏输入字段中设置值



Using javascript/jquery. 我想为每个以

查询。

queryForm['Foo'].value = queryForm['query.Foo'].value;
queryForm['Bar'].value = queryForm['query.Bar'].value;
queryForm['Baz'].value = queryForm['query.Baz'].value;
queryForm.submit();

并且仅当 queryForm['Foo'] 存在时。

上下文:(你不需要知道这个来回答我的问题,但很高兴知道上下文(

上面的问题是因为修复/黑客。因为我把原始模型放在视图模型中。现在,Query 位于 QueryViewModel 中。

@model QA.ViewModels.QueryViewModel
@using QA.ViewModels
@using QA.Enums
@{ 
var query = Model.Query;
}
<div class="form-group">
@Html.Required(model => query.Foo, "Describe the facts and circumstances that are relevant to the query", true, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-9">
@Html.EditorFor(model => query.Foo, new { htmlAttributes = new { @class = "form-control qa-tinymce-content" } })
@Html.ValidationMessageFor(model => query.Foo, "", new { @class = "text-danger" })
@Html.Hidden("Foo")
</div>
</div>

仔细阅读您在此处所做的操作:您将旧的 ViewModel 放在新的 ViewModel 中,并且您不想重命名部分中的字段名称。

那为什么不将所需的字段名称添加到新的视图模型中呢?

public Query Query { get; set; }
#region Variabeles in Query you do not wish to rename in the partial views.
public string Foo {
get { return Query.Foo; }
set { Query.Foo = value; }
}
#endregion 

你的黑客可以很容易地用简单的javascript完成,如下所示(未经测试(:

for (let propertyName in queryForm){
if(!queryForm.hasOwnProperty(propertyName) || propertyName.indexOf("query.") !== 0){
continue;
}
let shortPropertyName = propertyName.substring(6);
if(!queryForm.hasOwnProperty(shortPropertyName)){
continue;
}
queryForm[shortPropertyName].value = queryForm[propertyName].value;
//if you want to delete the 'long' property:
// delete queryForm[propertyName];
}
//// (use let or var at your preference)

但是,你真的应该问问自己为什么要做这样的事情!

恕我直言,您最好使用一个适当且整洁的模型供您查看

最新更新