Làm cách nào để đặt giá trị mặc định với Html.TextBoxFor?


198

Câu hỏi đơn giản, nếu bạn sử dụng Trình trợ giúp Html từ ASP.NET MVC Framework 1, có thể dễ dàng đặt giá trị mặc định trên hộp văn bản vì có quá tải Html.TextBox(string name, object value). Khi tôi đã thử sử dụng phương thức Html.TextBoxFor , suy đoán đầu tiên của tôi là thử những cách sau không hiệu quả:

<%: Html.TextBoxFor(x => x.Age, new { value = "0"}) %>

Bây giờ tôi có nên gắn bó với Html.TextBox (chuỗi, đối tượng) không?


sử dụng <%: Html.TextBoxFor (x => x.Age, mới {Value = "0"})%>, tạo một thay đổi nhỏ vốn V trong Giá trị.
Mohan Singh

Câu trả lời:


354

bạn có thể thử cái này

<%= Html.TextBoxFor(x => x.Age, new { @Value = "0"}) %>

49
Tò mò muốn biết tại sao chữ 'V' hoạt động và chữ thường 'v' không? Ngoài ra, giải pháp này ghi đè giá trị mô hình cho Tuổi, ngay cả khi có mặt.
Derek Hunziker

74
giá trị với v nhỏ là từ khóa cho C # msdn.microsoft.com/en-us/l Library / x9fsa0sw.aspx . Vì vậy, tôi nghĩ rằng đó là lý do tại sao nó không hoạt động.
Tassadaque

3
Ủng hộ bình luận bởi vì một người ủng hộ cho một câu trả lời mơ hồ và sâu sắc này có vẻ ... không đầy đủ.
ehv

9
Vẫn còn tò mò rằng @value không hoạt động. readonly cũng là một từ khóa cho C # nhưng @readonly hoạt động mà không gặp vấn đề gì.
Diego

16
Nguồn html trong trình duyệt là <input Value = "0" id = "Age" name = "Age" type = "text" value = "" /> khi sử dụng @Value. Có cả "Giá trị" với "0" và "giá trị" với "" trong thẻ đầu vào.
Ricky

59

Điều này sẽ làm việc cho MVC3 & MVC4

 @Html.TextBoxFor(m => m.Age, new { @Value = "12" }) 

Nếu bạn muốn nó là một trường ẩn

 @Html.TextBoxFor(m => m.Age, new { @Value = "12",@type="hidden" }) 

21
Đối với các trường ẩn, chỉ cần sử dụng @ Html.HiddenFor (m => m.Age, new {@Value = "12"})
Buginator

tốt một @ Html.HiddenFor (m => m.Age, new {@Value = "12"}) không wokring
RollerCosta

Và tại sao bạn lại ẩn một giá trị mặc định được mã hóa cứng như thế này? không có ý nghĩa
Antoine Pelletier

31

Hóa ra nếu bạn không chỉ định Mô hình cho phương thức Xem trong bộ điều khiển của mình, thì nó không tạo đối tượng cho bạn với các giá trị mặc định.

[AcceptVerbs(HttpVerbs.Get)]
public ViewResult Create()
{
  // Loads default values
  Instructor i = new Instructor();
  return View("Create", i);
}

[AcceptVerbs(HttpVerbs.Get)]
public ViewResult Create()
{
  // Does not load default values from instructor
  return View("Create");
}

Nhiều khả năng đó là lỗi hoặc tính năng của MVC, vì Html.PasswordFor (m => m.Password, new {class = "form-control", value = "default" được hiển thị gần như cùng một html và "default" đi để giá trị được hiển thị thành công. Ví dụ: value = Model.Email hoạt động, nhưng value = ViewBag.Email không hoạt động. Vì vậy, câu trả lời được chấp nhận này tốt hơn và sạch hơn, không phải là hack.
ZZZ

Instructor
Csaba Toth

20

Giá trị mặc định sẽ là giá trị Model.Agetài sản của bạn . Đó là loại của toàn bộ điểm.


3
Có vẻ đó là ý tưởng tồi khi mô hình quản lý các giá trị mặc định. Nên làm gì khi cần các giá trị mặc định khác nhau cho cùng một bộ sưu tập các mục mô hình?
RredCat

@RredCat Đồng ý, điều này làm vẩn đục việc tách lớp UI
Evan M

18

Bạn chỉ có thể làm:

<%= Html.TextBoxFor(x => x.Age, new { @Value = "0"}) %>

hoặc tốt hơn, điều này sẽ chuyển sang giá trị mặc định '0' nếu mô hình là null, ví dụ: nếu bạn có cùng chế độ xem cho cả chỉnh sửa và tạo:

@Html.TextBoxFor(x => x.Age, new { @Value = (Model==null) ? "0" : Model.Age.ToString() })

11

value = "0" sẽ đặt giá trị defualt cho @ Html.TextBoxfor

trường hợp nhạy cảm của nó "v" nên là vốn

Dưới đây là ví dụ làm việc:

@Html.TextBoxFor(m => m.Nights, 
    new { @min = "1", @max = "10", @type = "number", @id = "Nights", @name = "Nights", Value = "1" })

9

Đây là cách tôi giải quyết nó. Điều này hoạt động nếu bạn cũng sử dụng điều này để chỉnh sửa.

@Html.TextBoxFor(m => m.Age, new { Value = Model.Age.ToString() ?? "0" })

nếu Tuổi là null .. bạn sẽ nhận được một ngoại lệ con trỏ null vì ?? sẽ cố gắng kiểm tra sự trở lại của ToString ().
Eaglei22

@ Eaglei22 Nullable <T> .ToString () sẽ trả về một chuỗi rỗng nếu giá trị là null.
Tom Lint

cảm ơn bạn đã cho thấy làm thế nào để mô hình ràng buộc trong một đối tượng ẩn danh
vô ích

9

Công việc này đối với tôi

@Html.TextBoxFor(model => model.Age, htmlAttributes: new { @Value = "" })

+1 cho tham số được đặt tên đặc biệt hữu ích trong mã sao chép / mã có thể sử dụng và một tham số sử dụng một phương thức có nhiều quá tải
Ekus

8

Sử dụng @Valuelà một hack, bởi vì nó xuất ra hai thuộc tính, ví dụ:

<input type="..." Value="foo" value=""/>

Bạn nên làm điều này thay vào đó:

@Html.TextBox(Html.NameFor(p => p.FirstName).ToString(), "foo")

7

điều này làm việc cho tôi, theo cách này, chúng tôi đặt giá trị mặc định thành chuỗi trống

@Html.TextBoxFor(m => m.Id, new { @Value = "" })

2
Mặc dù mã này có thể trả lời câu hỏi, nhưng sẽ tốt hơn nếu bao gồm một số bối cảnh, giải thích cách thức hoạt động và khi nào sử dụng nó. Câu trả lời chỉ có mã là không hữu ích trong thời gian dài.
Bono

@Bono đã thêm một số ý kiến
eric_eri

5

Nếu bạn có một dạng trang một phần cho cả chỉnh sửa và thêm, thì mẹo tôi sử dụng để làm giá trị mặc định 0 là làm như sau:

@Html.TextBox("Age", Model.Age ?? 0)

Theo cách đó, nó sẽ là 0nếu không đặt hoặc tuổi thực tế nếu nó tồn tại.


1
Nếu Age là int, điều đó sẽ không hiệu quả; Nó sẽ cần phải là một int nullable.
Justin Tự

0

Cũng thử điều này, đó là loại bỏ {} mới và thay thế nó bằng chuỗi.

<%: Html.TextBoxFor(x => x.Age,"0") %>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.