Html.TextBoxFor로 기본값을 설정하는 방법은 무엇입니까?


198

간단한 질문은 ASP.NET MVC Framework 1의 Html Helper를 사용하는 경우 overload가 있기 때문에 텍스트 상자에서 기본값을 설정하는 것이 쉽습니다 Html.TextBox(string name, object value). Html.TextBoxFor 메서드를 사용하려고 시도했을 때 첫 번째 추측은 작동하지 않는 다음을 시도하는 것입니다.

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

지금은 Html.TextBox (string, object)를 고수해야합니까?


이 <% : Html.TextBoxFor (x => x.Age, new {Value = "0"}) %>을 사용하고 Value에서 V를 약간 변경하십시오.
Mohan Singh

답변:


354

당신은 이것을 시도 할 수 있습니다

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

49
대문자 'V'가 작동하는 이유와 소문자 'v'가 왜 작동하지 않는지 궁금하십니까? 또한이 솔루션은 연령에 대한 모델 값이있는 경우에도이를 무시합니다.
Derek Hunziker

74
작은 v 값은 C # msdn.microsoft.com/en-us/library/x9fsa0sw.aspx의 키워드입니다 . 그래서 나는 그것이 작동하지 않는 이유를 생각합니다.
Tassadaque

3
답변이 불분명하고 통찰력이있는 것처럼 보였기 때문에 의견이 불분명 해져서…
ehdv

9
@value가 작동하지 않는 것이 여전히 궁금합니다. readonly는 C #의 키워드이지만 @readonly는 아무런 문제없이 작동합니다.
Diego

16
@Value를 사용할 때 브라우저의 html 소스는 <input Value = "0"id = "Age"name = "Age"type = "text"value = ""/>입니다. 입력 태그에는 "Value"가 "0"이고 "value"가 ""입니다.
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, new {@Value = "12"})를 사용하십시오
Buginator

좋은 것 @ Html.HiddenFor (m => m.Age, 새로운 {@Value = "12"})
RollerCosta

그리고 왜 이렇게 하드 코딩 된 기본값을 숨기겠습니까? 의미가 없다
Antoine Pelletier

31

컨트롤러 내에서 View 메소드에 모델을 지정하지 않으면 기본값으로 객체를 생성하지 않습니다.

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

Html.PasswordFor (m => m.Password, new {class = "form-control", value = "default"는 거의 동일한 HTML로 렌더링되고 "default"는 go이므로) MVC 버그 또는 기능 일 가능성이 높습니다. value = Model.Email은 작동하지만 value = ViewBag.Email은 작동하므로이 응답은 해킹이 아닌 더 좋고 깨끗합니다.
ZZZ

무엇입니까 Instructor?
Csaba Toth

20

기본값은 Model.Age부동산 의 가치입니다 . 그것은 요점의 종류입니다.


3
모델이 기본값을 관리하는 것은 좋지 않은 것 같습니다. 동일한 모델 항목 모음에 서로 다른 기본값이 필요할 경우 어떻게해야합니까?
RredCat

@RredCat Agreed, 이것은 UI 계층의 분리를 흐리게합니다
Evan M

18

간단하게 할 수 있습니다 :

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

또는 모델이 null 인 경우, 예를 들어 편집과 작성 모두에 대해 동일한보기가있는 경우 기본값 '0'으로 전환됩니다.

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

11

value = "0"은 @ Html.TextBox에 대한 기본 값을 설정합니다.

대소 문자를 구분하는 "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 인 경우에는 ?? 때문에 null 포인터 예외가 발생합니다. ToString ()의 반환을 확인하려고합니다.
eaglei22

@ eaglei22 Nullable <T> .ToString ()은 값이 null 인 경우 빈 문자열을 반환합니다.
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이면 작동하지 않습니다. nullable int 여야합니다.
저스틴 셀프

0

이것도 시도해보십시오. 새 {}를 제거하고 문자열로 바꾸십시오.

<%: Html.TextBoxFor(x => x.Age,"0") %>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.