使用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']存在时才会出现。
上下文:(你不需要知道这个来回答我的问题,但很高兴知道上下文)
以上问题是因为修复/黑客攻击。因为我将原始模型放在ViewModel中。现在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>
答案 0 :(得分:2)
仔细阅读你在这里所做的事情:你将旧的ViewModel放在一个新的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
答案 1 :(得分:1)
你可以通过简单的javascript轻松完成你的hack,如下所示(未经测试):
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)
但是,你应该真的问自己你为什么要做这些事情!
恕我直言,你最好选择适当而整洁的模型作为你的观点。