2012-06-11 32 views
5

Tôi gặp sự cố lạ với chế độ xem của tôi trong dự án MVC 3. Tôi có chế độ xem chuẩn để chỉnh sửa dữ liệu (được tạo bằng mẫu). Khi tôi gửi biểu mẫu, tôi thay đổi thuộc tính Name, nhưng sau khi tôi quay lại trình duyệt từ trình điều khiển, tôi vẫn thấy giá trị lorem. Tại sao ?MVC 3 Chế độ xem không được làm mới sau khi gửi mẫu

@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

đã hành động bài bị trúng? visual breakpoint studio ?? – Shyju

+0

@Shyju Có, trình gỡ lỗi gọi hành động của HttpPost sau khi tôi nhấn nút gửi – Tony

+0

Tại sao 'Xem (" ~/Views/UserDetails.cshtml ", Model)' thay vì đặt nó trong thư mục được chia sẻ và thực hiện 'Xem (" UserDetails ", Model)"? –

Trả lời

7

Bạn cần phải loại bỏ các giá trị từ ModelState nếu bạn muốn thay đổi nó trong một bài đăng/nhận được:

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

này được xây dựng trong MVC behavoir: tất cả các Html.Helpers thích các giá trị trong bộ sưu tập ModelState so với các giá trị mô hình thực tế.

Có một bài viết hay về điều này tại đây: ASP.NET MVC Postbacks and HtmlHelper Controls ignoring Model Changes.

+0

Bạn nói đúng, giờ nó hoạt động. Cảm ơn vì những lời khuyên ! – Tony

3

Đây là theo thiết kế. MVC giả định rằng bạn muốn hiển thị những gì người dùng ban đầu được gửi khi xử lý một hành động bài đăng. Xem this related stack overflow post.

0

Chỉ cần một Sửa nhỏ ... để làm mới toàn bộ mẫu

[HttpPost] 
public ViewResult EditUserData(UserData model) 
{ 
    UserData newmodel = new UserData(); 
    ModelState.Clear(); 
    model = newmodel; 
    return View("~/Views/UserDetails.cshtml", model);  
} 
Các vấn đề liên quan