Использование 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. Теперь запрос находится в 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, и вы не хотите переименовывать имена полей в частичных.
Тогда почему бы вам не добавить необходимые имена полей в новый 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)
Но вы должны действительно спросить себя, почему вы хотели бы делать такие вещи!
ИМХО, вам лучше пойти с надлежащей и опрятной моделью для вашего взгляда.