Javascript: установка значений в HTML-форме скрытых полей ввода

1

Использование 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>
  • 2
    Не используйте "взломать"; просто исправьте ваш код, чтобы он работал правильно в первую очередь. Попытка сделать что-то подобное с помощью JavaScript, чтобы скрыть ошибку в коде, является плохой идеей.
Теги:
asp.net-mvc

2 ответа

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 
  • 0
    Я проверю это и посмотрю, работает ли это для меня. Похоже, самый простой способ решить мою проблему.
  • 0
    С некоторыми дополнительными изменениями это сработало для меня.
1

Ваш хак можно легко сделать с помощью простого 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)

Но вы должны действительно спросить себя, почему вы хотели бы делать такие вещи!

ИМХО, вам лучше пойти с надлежащей и опрятной моделью для вашего взгляда.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню