2012-06-11 9 views
5

Mam dziwny problem z moim widokiem w projekcie MVC 3. Mam standardowy widok do edycji danych (utworzony przy użyciu szablonu). Po przesłaniu formularza zmieniam właściwość Name, ale po powrocie do przeglądarki ze sterownika nadal widzę wartość lorem. Czemu ?MVC 3 Widok nie jest odświeżany po przesłaniu modelu

@using (Html.BeginForm()) 
    { 
     @Html.EditorFor(model => model.Name) 
     <input type="submit" value="Save" /> 
    } 


    public ViewResult EditUserData(int id) 
    { 
     [...] 
     UserData model = new UserData(); 
     model.Name = "lorem";    

     return View("~/Views/UserDetails.cshtml", model); 
    } 

    [HttpPost] 
    public ViewResult EditUserData(UserData model) 
    { 
     model.Name = "ipsum"; 
     return View("~/Views/UserDetails.cshtml", model);  
    } 

public class ControlUserData 
{ 
    [...] 

    [Required] 
    [Display(ResourceType = typeof(Resources), Name = "UserNameFirst")] 
    public string Name { get; set; } 
} 
+0

nie działanie po uderzeniu? punkty przerw w visual studio? – Shyju

+0

@Shyju Tak, debugger wywołuje akcję HttpPost po tym jak kliknę przycisk przesyłania – Tony

+0

Dlaczego 'View (" ~/Views/UserDetails.cshtml ", Model)' zamiast umieszczać go w katalogu współdzielonym i robić 'Widok (" UserDetails " ", Model)"? –

Odpowiedz

7

Musisz usunąć wartości z ModelState jeśli chcesz zmodyfikować go w post/get:

[HttpPost] 
public ViewResult EditUserData(UserData model) 
{ 
    ModelState.Remove("Name"); 
    model.Name = "ipsum"; 
    return View("~/Views/UserDetails.cshtml", model);  
} 

ta jest wbudowana w MVC behavoir: wszystkie Html.Helpers preferuje wartości kolekcja ModelState nad rzeczywistymi wartościami modelu.

Tutaj jest dobry artykuł na ten temat: ASP.NET MVC Postbacks and HtmlHelper Controls ignoring Model Changes.

+0

Masz rację, teraz to działa. Dzięki za porady! – Tony

3

Jest to zgodne z projektem. MVC zakłada, że ​​chcesz pokazać, co użytkownik pierwotnie przesłał podczas przetwarzania akcji postu. Zobacz this related stack overflow post.

0

Wystarczy mała Edit ... do odświeżenia całego modelu

[HttpPost] 
public ViewResult EditUserData(UserData model) 
{ 
    UserData newmodel = new UserData(); 
    ModelState.Clear(); 
    model = newmodel; 
    return View("~/Views/UserDetails.cshtml", model);  
} 
Powiązane problemy