วิธีการตั้งค่าเริ่มต้นด้วย Html.TextBoxFor?


198

คำถามง่ายๆถ้าคุณใช้ Html Helper จาก ASP.NET MVC Framework ที่ 1 Html.TextBox(string name, object value)มันเป็นเรื่องง่ายที่จะตั้งค่าเริ่มต้นในช่องเพราะมีเกิน เมื่อฉันลองใช้วิธีHtml.TextBoxForการคาดเดาครั้งแรกของฉันคือลองทำสิ่งต่อไปนี้ซึ่งใช้งานไม่ได้:

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

ฉันควรจะติดกับ Html.TextBox (สตริงวัตถุ) ตอนนี้หรือไม่


ใช้ <%: Html.TextBoxFor (x => x.Age, ใหม่ {Value = "0"})%>, ทำการเปลี่ยนแปลงตัว V เล็ก ๆ ใน Value
Mohan Singh

คำตอบ:


354

คุณสามารถลองสิ่งนี้

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

49
อยากรู้ว่าทำไมทุน 'V' ถึงทำงานและตัวพิมพ์เล็ก 'v' ไม่ได้? นอกจากนี้โซลูชันนี้จะแทนที่ค่ารุ่นสำหรับ Age แม้ว่าจะมีอยู่ก็ตาม
Derek Hunziker

74
คุ้มค่าด้วย v ขนาดเล็กเป็นคำสำคัญสำหรับ C # msdn.microsoft.com/en-us/library/x9fsa0sw.aspx ดังนั้นฉันคิดว่านั่นเป็นเหตุผลว่าทำไมมันไม่ทำงาน
Tassadaque

3
เพิ่มความคิดเห็นเนื่องจากมีหนึ่งโหวตในคำตอบที่คลุมเครือและลึกซึ้งนี้ดูเหมือน ... ไม่เพียงพอ
ehdv

9
ยังคงสงสัยว่า @ ค่าไม่ทำงาน อ่านได้อย่างเดียวยังเป็นคำหลักสำหรับ C # แต่ @readonly ทำงานได้โดยไม่มีปัญหาใด ๆ
Diego

16
แหล่งที่มา html ในเบราว์เซอร์คือ <input Value = "0" id = "Age" name = "Age" type = "text" value = "" /> เมื่อใช้ @Value มีทั้ง "ค่า" กับ "0" และ "ค่า" กับ "" ในแท็กอินพุต
Ricky

59

สิ่งนี้ควรใช้กับ MVC3 & MVC4

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

หากคุณต้องการให้มันเป็นสนามที่ซ่อนอยู่

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

21
สำหรับเขตข้อมูลที่ซ่อนอยู่ให้ใช้ @ Html.HiddenFor (m => m.Age ใหม่ {@Value = "12"})
Buginator

good one @ Html.HiddenFor (m => m.Age ใหม่ {@Value = "12"}) ไม่ต้องตื่น
RollerCosta

และทำไมคุณต้องซ่อนค่าเริ่มต้นที่กำหนดรหัสยากไว้แบบนี้ non sense
Antoine Pelletier

31

ปรากฎว่าถ้าคุณไม่ได้ระบุรุ่นให้กับวิธีการดูภายในตัวควบคุมของคุณมันจะไม่สร้างวัตถุให้คุณด้วยค่าเริ่มต้น

[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");
}

มีโอกาสมากขึ้นที่จะเป็นข้อผิดพลาดหรือคุณลักษณะ MVC เนื่องจาก Html.PasswordFor (m => m.Password ใหม่ {class = "form-control", value = "default" จะแสดงเป็น html เดียวกันและ "default" go เป็นค่าที่แสดงได้สำเร็จตัวอย่างเช่น value = Model.Email ใช้งานได้ แต่ value = ViewBag.Email ทำงานได้ดังนั้นคำตอบที่ยอมรับนี้ดีกว่าและสะอาดกว่าไม่ใช่แฮ็ค
ZZZ

คือInstructorอะไร
Csaba Toth

20

ค่าเริ่มต้นจะเป็นมูลค่าของModel.Ageทรัพย์สินของคุณ นั่นเป็นจุดรวม


3
ดูเหมือนว่าเป็นความคิดที่ไม่ดีเมื่อแบบจำลองจัดการค่าเริ่มต้น สิ่งที่ควรทำเมื่อค่าเริ่มต้นที่แตกต่างกันต้องการสำหรับการรวบรวมไอเท็มโมเดลเดียวกัน
RredCat

@ RedCat เห็นด้วย muddies นี้แยกชั้น UI
Evan M

18

คุณสามารถทำได้โดยง่าย:

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

หรือดีกว่านี่จะเปลี่ยนเป็นค่าเริ่มต้น '0' หากโมเดลเป็นโมฆะตัวอย่างเช่นถ้าคุณมีมุมมองเดียวกันสำหรับทั้งการแก้ไขและการสร้าง:

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

11

value = "0" จะตั้งค่าเริ่มต้นสำหรับ @ Html.TextBox สำหรับ

case sensitive "v" ควรเป็นตัวพิมพ์ใหญ่

ด้านล่างเป็นตัวอย่างการทำงาน:

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

9

นี่คือวิธีที่ฉันจะแก้ไขมัน ใช้งานได้หากคุณใช้เพื่อแก้ไข

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

ถ้า Age เป็นโมฆะ .. คุณจะได้รับข้อยกเว้นตัวชี้ null เพราะ? กำลังพยายามตรวจสอบการส่งคืน ToString ()
eaglei22

@ eaglei22 Nullable <T> .ToString () จะส่งคืนสตริงว่างถ้าค่าเป็นโมฆะ
Tom Lint

ขอบคุณที่แสดงวิธีผูกมัดแบบในวัตถุที่ไม่ระบุตัวตน
ไม่มี

9

งานนี้สำหรับฉัน

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

+1 สำหรับพารามิเตอร์ที่มีชื่อซึ่งมีประโยชน์อย่างยิ่งในการคัดลอก / วางรหัสและหนึ่งที่ใช้วิธีการที่มีการโอเวอร์โหลดจำนวนมาก
Ekus

8

การใช้งาน@Valueเป็นแฮ็คเพราะมันให้ผลลัพธ์สองคุณสมบัติเช่น:

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

คุณควรทำสิ่งนี้แทน:

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

7

สิ่งนี้ใช้ได้กับฉันด้วยวิธีนี้เราจะตั้งค่าเริ่มต้นเป็นสตริงว่าง

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

2
ในขณะที่รหัสนี้อาจตอบคำถามมันจะดีกว่าที่จะรวมบริบทอธิบายวิธีการทำงานและเวลาที่จะใช้ คำตอบแบบรหัสเท่านั้นไม่มีประโยชน์ในระยะยาว
Bono

@Bono เพิ่มความคิดเห็น
eric_eri

5

หากคุณมีรูปแบบหน้าบางส่วนสำหรับทั้งการแก้ไขและการเพิ่มเคล็ดลับที่ฉันใช้เป็นค่าเริ่มต้น0คือให้ทำดังต่อไปนี้:

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

วิธีนั้นจะเป็น0ถ้าไม่มีการตั้งค่าหรืออายุที่แท้จริงถ้ามันมีอยู่


1
ถ้า Age เป็น int นั่นจะไม่ทำงาน มันจะต้องเป็น int เป็นโมฆะ
Justin Self Self

0

ลองสิ่งนี้เช่นกันนั่นคือการลบ {} ใหม่และแทนที่ด้วยสตริง

<%: Html.TextBoxFor(x => x.Age,"0") %>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.