2016-05-17 2 views
0

У меня есть веб-приложение ASP MVC.Мой пользовательский интерфейс не отражает изменения моей модели

У меня есть частичная форма, и она сначала отображает «Hello Andy!». Я нажимаю кнопку отправки, и я меняю это на «Hello Andy Again !. Я передаю модель обратно в интерфейс. На этикетке по-прежнему отображается старое значение.

Почему?

Моя разметка:

@using (Ajax.BeginForm("SaveAlertPreferences", "Users", new AjaxOptions 
{ 
    UpdateTargetId = "partialform", 
    InsertionMode = InsertionMode.Replace, 
    HttpMethod = "POST", 
{ 
    <div> 
     @Html.AntiForgeryToken() 
     <div class="section group"> 
      <div class="col span_3_of_12"> 
       @Html.LabelFor(model => model.myStub) 
      </div> 
      <div class="col span_9_of_12"> 
       @Html.TextBoxFor(model => model.myStub) 
      </div> 
     </div> 

     <div class="section group"> 
      <div class="col span_3_of_12"> 
      </div> 
      <div class="col span_4_of_12"> 
       <input type="submit" value="Press me" /> 
      </div> 
      <div class="col span_5_of_12"> 
      </div> 
     </div> 
    </div> 
} 

Моя модель:

public class ChangeAlertPreferencesModel 
{ 
    public string myStub { get; set; } 
} 

Мой контроллер:

[AcceptVerbs("HEAD", "GET")] 
public PartialViewResult _ChangeAlertPreferences() 
{ 
    Response.CacheControl = "no-cache"; 

    ChangeAlertPreferencesModel m = new ChangeAlertPreferencesModel(); 
    m.myStub = "Hello Andy!"; 
    return PartialView("_ChangeAlertPreferences", m); 
} 

[HttpPost] 
public PartialViewResult SaveAlertPreferences(ChangeAlertPreferencesModel m) 
{ 
    Response.CacheControl = "no-cache"; 
    if (ModelState.IsValid) 
    { 
     m.myStub = "Hello Andy Again!"; 
     return PartialView("_ChangeAlertPreferences", m); 
    } 
    else 
    { 
     m.myStub = "I have errored!"; 
     return PartialView("_ChangeAlertPreferences", m); 
    } 
    return null; 
} 
+1

1st: является 'partialform' идентификатором родительского' div 'метки? 2nd: ajax form и другие функции ajax «missbehave», если вы не используете jquery-ajax-unobtrusive.js в своем проекте, поэтому убедитесь, что вы это получили. Вы можете скачать его через NuGet. – Spluf

+0

@Spluf Привет, спасибо за ваше время. Да partialform - это идентификатор родителя формы. Я взгляну на эту структуру - спасибо –

+0

@CodeCaster спасибо. Будет выглядеть –

ответ

0

Чтобы закончить мой комментарий, ваша форма заявление выглядит странно, так что вы могли бы хотеть попробовать это:

@using (Ajax.BeginForm("SaveAlertPreferences", "Users", new AjaxOptions 
{ 
    UpdateTargetId = "partialform", 
    InsertionMode = InsertionMode.Replace, 
    HttpMethod = "POST", 
})) 
{ 

     @Html.AntiForgeryToken() 
     <div class="section group"> 
      <div class="col span_3_of_12"> 
       @Html.LabelFor(model => model.myStub) 
      </div> 
      <div class="col span_9_of_12"> 
       @Html.TextBoxFor(model => model.myStub) 
      </div> 
     </div> 

     <div class="section group"> 
      <div class="col span_3_of_12"> 
      </div> 
      <div class="col span_4_of_12"> 
       <input type="submit" value="Press me" /> 
      </div> 
      <div class="col span_5_of_12"> 
      </div> 
     </div> 
} 

Чтобы объяснить, в первой строке часть using объявляет форму и как она должна себя вести, затем вы завершаете это объявление и открываете блок, который должен содержать тело формы.

+0

Спасибо. Мне пришлось опустить несколько строк кода из используемого бита в качестве кода компании, который мне не разрешено публиковать. Модель меняет значение, так что это проблема с кэшированием и, возможно, структура, которую вы предложили, помогите :) –