2011-09-26 29 views
7

Tôi có một vấn đề lạ và nó đã làm tôi bực mình trong vài giờ qua. Tôi dường như không thể tìm thấy bất cứ điều gì liên quan; có lẽ tôi không đủ cụ thể, vì tôi không chắc chắn làm thế nào để viết nó một cách chính xác, hoặc đó là một vấn đề kỳ lạ duy nhất.Diện tích văn bản rỗng đó

Có một biểu mẫu mà người dùng điền vào để cập nhật thông tin tài khoản của họ, mọi thứ hoạt động như bình thường, ngoại trừ một vùng văn bản. Các vùng văn bản '(được ràng buộc với thuộc tính Comments của UserInfo) giá trị sẽ trở thành rỗng sau khi biểu mẫu được BÀI ĐĂNG. Tài sản Comments là tài sản duy nhất không có giá trị.

khi nó xảy ra
A) Không có giá trị hiện có, sử dụng đầu vào một giá trị, tài sản là null.
B) Giá trị hiện tại, người dùng không/không thay đổi thứ gì đó/bất cứ điều gì, tài sản là null.

Tôi sẽ chỉ bao gồm mã có liên quan để giữ mọi thứ gọn gàng và đơn giản. Hy vọng rằng nó là đủ.

điều khiển Actions

public ActionResult Edit_Information(long id) 
{ 
    // Get user info from the database. 
    // Return the view with the user info from the DB etc. 
} 

[HttpPost] 
public ActionResult Edit_Information(long id, UserInfo userInfo) 
{ 
    if (!this.ModelState.IsValid) 
    { 
     // Invalid 
     return View(userInfo); 
    } 

    // Update the information in the DB. 

    // Redirect the user back to their account. 
} 

Razor View HTML

<div style="width: 700px; margin-left: auto; margin-right: auto; text-align: left"> 
@Html.ValidationMessageFor(x => x.Comments) 
</div> 
@Html.Partial("~/Views/Shared/_EditorSmiles.cshtml") 
@Html.TextAreaFor(x => x.Comments, new { @class = "EditorArea profile-comments" }) 

UserInfoMẫu

[Validator(typeof(UserInfoValidator))] 
public class UserInfo 
{ 
    public string Comments { get;set; } 
} 

Có, tôi sử dụng FluentValidation trên mô hình. Tôi đã gỡ bỏ nó để xem đó có phải là nguyên nhân không, nhưng không phải vậy.

Những điều tôi đã thử

  • Trên hành động POST, tôi đã sử dụng FormCollection formCollection thay vì UserInfo userInfo.
  • Đã ném một ngoại lệ lên hành động POST để chứng minh giá trị trở thành rỗng khi được đăng.
  • Đã tạo thuộc tính mới có tên khác.
  • Đặt giá trị thuộc tính theo cách thủ công trước khi trả lại chế độ xem. Giá trị trở thành null khi nó được đăng.
  • Đặt giá trị theo cách thủ công cho thuộc tính trong hành động POST để chứng minh đó không phải là DB hoặc SQL. Điều này làm việc.
  • Đã xóa thuộc tính Xác thực thông tin khỏi mô hình (như đã nói ở trên).
  • Đã sử dụng [Bind(Prefix = "")] trước UserInfo userInfo. Điều này không thay đổi gì cả.

Điều đó khiến tôi thất vọng đến mức tôi phải hỏi: Cái quái gì đang xảy ra? Tôi có làm điều gì sai? Tôi phải nhìn cái gì đó. Có một vùng văn bản khác trên trang hoạt động như bình thường. Nó chỉ là vùng văn bản cho Comments luôn trả về giá trị null bất kể điều kiện.

+0

Loại bỏ UserInfo - chỉ cần có tham số nhận xét. Nó có dân cư không? Nhận xét trong biểu mẫu (và bạn thấy nó được đăng trong Fiddler)? –

+0

Xong. Nhận xét tồn tại trong biểu mẫu (ít nhất tôi giả định là). Nó vẫn còn null. Tôi không quen với Fiddler, trên thực tế, tôi chưa bao giờ nghe về nó. –

+1

Có lẽ một câu hỏi cực kỳ ngu ngốc, nhưng bạn có chắc chắn phần "nhận xét" mà bạn đã đăng ở đây được đưa vào bên trong thẻ biểu mẫu chính xác không? Hoặc có thể bạn có một va chạm tên trong quan điểm của bạn? – Iridio

Trả lời

3

Các hình thức đã được bọc như vậy:

Html.BeginWindow(); 
Html.BeginForm("edit_information", "user", FormMethod.Post, new { id = "profile" }); 
<!-- other stuff goes in between here --> 
Html.EndForm(); 
Html.EndWindow(); 

Html.BeginWindow() tạo ra một bảng (một cửa sổ) được quấn quanh mẫu. Điều này rõ ràng đã khiến các phần của biểu mẫu không được POST đúng cách.

Thay đổi để:

Html.BeginForm("edit_information", "user", FormMethod.Post, new { id = "profile" }); 
Html.BeginWindow(); 
<!-- other stuff goes in between here --> 
Html.EndWindow(); 
Html.EndForm(); 

Bam! Nó hoạt động trở lại. Điều này không bao giờ xảy ra với tôi như tôi đã thực hiện nó trước mà không có bất kỳ vấn đề. Tôi rất vui vì nó đã được sửa. Tất cả chúng ta đều phạm sai lầm.

Các vấn đề liên quan