2012-06-11 16 views
5

MVC 3 projesindeki görünümümde garip bir sorun var. Veri düzenleme için standart bir görünümüm var (şablonu kullanarak oluşturuldu). Formu gönderdiğimde, Name özelliğini değiştirdim, ancak denetleyiciden tarayıcıya geri döndükten sonra hala lorem değerini görüyorum. Niye ya ? Bir yayında bunu değiştirmek istiyorsanızMVC 3 Model gönderildikten sonra Görünüm yenileniyor değil

@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

ferahlatıcı için yazılan eylem vurulduktan mi? görsel stüdyo kırılma noktaları ?? – Shyju

+0

@Shyju Evet, hata ayıklayıcı HttpPost eylemini gönderdikten sonra gönder düğmesine bastıktan sonra – Tony

+0

Neden? Görünüm ("~/Görünümler/UserDetails.cshtml", Model) 'yerine paylaşılan dizine koyup 'Görüntüle (" UserDetails ") ", Model"? –

cevap

7

Sen ModelState gelen değerini kaldırmak gerekir/get:

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

Bu MVC behavoir inşa edilmiştir: Her Html.Helpers değerleri tercih Gerçek model değerleri üzerinde ModelState koleksiyonu.

Bu konuda iyi bir makale var: ASP.NET MVC Postbacks and HtmlHelper Controls ignoring Model Changes.

+0

adresinde düzeltildi Artık haklısın, şimdi çalışıyor. İpuçları için teşekkürler ! – Tony

3

Bu, tasarım gereğidir. MVC, kullanıcının bir eylemi işlerken ilk gönderdiği şeyi göstermek istediğinizi varsayar. Bakınız this related stack overflow post.

0

Sadece küçük bir düzenle ... tüm Model

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