2013-05-15 67 views
7

Làm cách nào tôi có thể đặt giá trị mặc định trong hộp soạn thảo của mình để trong trường hợp tôi không viết bất kỳ thứ gì trong hộp, nó không gửi giá trị null.cách đặt giá trị mặc định HTML.EditorFor()

<div class="editor-label"> 
     @Html.Label("Description") 
     </div>           // somthing like 
     <div>@Html.EditorFor(model => model.Description, " Default value ") 
     @Html.ValidationMessageFor(model => model.Description) 
    </div> 

Hoặc nếu tôi thay đổi để:

@Html.TextBoxFor(Model.somthing, "Default value") 

Trả lời

0

Làm thế nào về việc xác định mô hình của bạn có "giá trị mặc định" cho bất động sản somthing của nó? trong trường hợp đó bạn không cần phải làm bất cứ điều gì đặc biệt. Nếu điều đó không thỏa đáng (ví dụ: bạn không muốn người dùng thấy "Giá trị mặc định" trên màn hình), bạn có thể có trình kết nối mô hình tùy chỉnh cho mô hình này kế thừa từ DefaultModelBinder, chỉ ghi đè phương thức OnModelUpdated, trong đó một cái gì đó dọc theo dòng:

model.somthg = string.IsNullOrEmpty(model.somthing) ? "Default Value" : model.somthing 

Cũng xin lưu ý rằng EditorFor bỏ qua các thuộc tính html tùy chỉnh mà bạn gửi cho nó theo như tôi biết.

11

Cách đơn giản nhất là để khởi tạo tài sản trong nhà xây dựng mô hình của bạn:

public class PersonModel { 
    public PersonModel() { 
     FirstName = "Default first name"; 
     Description = "Default description"; 
    } 
    public int Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string Description { get; set; } 
} 

Và khi bạn muốn gửi nó vào xem, ví dụ như trong PersonController.Create hành động phương pháp:

public ActionResult Create() { 
    var model = new PersonModel(); 
    return View(model); 
} 

[HttpPost] 
public ActionResult Create(PersonModel model) { 
    // do something on post-back 
} 

Đó Là nó. Hãy nhớ rằng, bạn phải tạo một phiên bản mới của mô hình của bạn và chuyển nó sang chế độ xem để sử dụng các giá trị mặc định của nó. Bởi vì quan điểm liên quan đến phương pháp hành động này, hy vọng một trường hợp PersonModel, nhưng khi bạn sử dụng các phương pháp tạo ra như thế này:

public ActionResult Create() { 
    return View(); 
} 

quan điểm có gì (ý tôi là null), do đó giá trị mặc định của bạn không tồn tại trong thực tế.

Nhưng nếu bạn muốn thực hiện điều này cho các mục đích phức tạp, ví dụ: sử dụng giá trị mặc định dưới dạng hình mờ, hoặc như @JTMon đã nói, bạn không muốn người dùng cuối xem giá trị mặc định, bạn sẽ có một số giải pháp khác. Xin vui lòng cho tôi biết mục đích của bạn.

1

Thay vì sử dụng

@Html.EditorFor(model => model.UserId) 

Sử dụng

@Html.TextBoxFor(model => model.UserId, new { @Value = "Prabhat" }) 
18

Để hiển thị một giá trị mặc định trong một lĩnh vực mà bạn phải gán tài sản 'Giá trị' trong htmlAttributes cho nó như trong ví dụ này:

@Html.EditorFor(model => model.Description, new { htmlAttributes = new { @class = "form-control", @Value = ViewBag.DefaultDescription } }) 

Đảm bảo rằng V trong Giá trị là chữ hoa.

Bằng cách này, bạn sẽ chỉ gán giá trị mặc định trên trường html chứ không phải trong mô hình.

Chỉ định giá trị mặc định trong mô hình buộc bạn phải tạo đối tượng mô hình trước và sẽ thiết lập giá trị mặc định cho các trường không thể rỗng như datetimes, điều này sẽ làm cho trang hiển thị sự khó chịu 1/1/1001 00:00: 00 giá trị trong các trường ngày giờ bạn có thể có trong phần còn lại của mô hình.

+0

Cảm ơn đây là những gì tôi đang tìm kiếm. Trường hợp trên V đã cho tôi. Tại sao họ làm cho nó không phù hợp như vậy? – JSideris

+0

Thao tác này sẽ hoạt động với các phần tử Html có thuộc tính giá trị như đầu vào.Đối với các yếu tố như textarea tôi muốn giới thiệu giải pháp của Javad_Amiry – CF5

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