Html.HiddenFor는 무엇을합니까?


105

Html.HiddenFor에 대한 설명서를 읽었지만 그것이 무엇에 사용되는지 이해하지 못했습니다 ...

누군가 그 용도를 설명하고 간단한 예를 들어 줄 수 있습니까?

그 도우미는 코드에서 어디로 가야합니까?

답변:


112

전달하는 필드 (모델에서)에 대한 양식에 숨겨진 입력을 작성합니다.

페이지에서 유지해야하고 다른 호출이 수행 될 때 다시 전달되었지만 사용자가 볼 수없는 모델 / ViewModel의 필드에 유용합니다.

다음 ViewModel 클래스를 고려하십시오.

public class ViewModel
{
    public string Value { get; set; }
    public int Id { get; set; }
}

이제 편집 페이지에 ID를 저장하고 싶지만 표시되지 않도록합니다.

<% using(Html.BeginForm() { %>
    <%= Html.HiddenFor(model.Id) %><br />
    <%= Html.TextBoxFor(model.Value) %>
<% } %>

결과는 다음 HTML과 동일합니다.

<form name="form1">
    <input type="hidden" name="Id">2</input>
    <input type="text" name="Value" value="Some Text" />
</form>

위의 예에서 <% = Html.HiddenFor (model.Id) %> <br />
Bryce Fischer

11
나는 사용자가 "본"이라고 말할 것입니다. 사용자는 숨기거나 숨기고 싶은 모든 것을 "수정"할 수 있습니다.
Craig Stuntz

@ 크레이그-당신 말이 맞아요. 나는 실제로 그 문구를 변경했지만 분명히 그렇지 않았습니다.
Justin Niessner 2010 년

그리고 일반적으로 표시하지 않으려는 ID (위의 예에서와 같이)에 사용됩니다.
RickAndMSFT

뷰 모델이 컨트롤러의 매개 변수가 아니기 때문에 약간 혼란 스럽습니다. 그렇다면 입력의 이름이 뷰 모델의 필드에 생성되는 이유는 무엇입니까?
John

8

그리고 Edit 작업 메서드에서 숨겨진 ID 입력을 다시 사용하려면 :

[HttpPost]
public ActionResult Edit(FormCollection collection)
{
    ViewModel.ID = Convert.ToInt32(collection["ID"]);
}

8
이것은 기술적으로 사실이지만 폼이 뷰 모델에 강력하게 입력 된 경우에는이 작업을 수행 할 필요가 없습니다. 모델에 직접 액세스 할 수 있어야 변환을 수행 할 필요가 없습니다.
Yetti

@Yetti : 틀 렸습니다. 스캐 폴딩 메커니즘이 ID 필드를 추가하는 데는 충분한 이유가 있습니다. 내 튜토리얼 중 하나에서 제거하고 Fiddler를 사용하여 게시물 본문에 없는지 확인하십시오.
RickAndMSFT

2
댓글이 어떻게 틀렸는 지 잘 모르겠습니다. 모델이 뷰에서 For () 'd 속성 인 경우 컨트롤러 메서드는 강력한 형식이어야하며 ModelBinder에 의해 자동으로 채워 져야합니다.
Erik Philips

2

많은 기능과 마찬가지로이 기능은 다양한 문제를 해결하기 위해 여러 가지 방법으로 사용될 수 있습니다. 저는 우리의 툴 벨트에있는 또 다른 도구라고 생각합니다.

지금까지 논의는 단순히 ID를 숨기는 데 중점을 두었지만 이는 하나의 값일뿐입니다. 많은 값에 사용하지 않는 것이 좋습니다! html.beginform이 새 객체를 생성하고 해당 뷰에 대한 모델 객체에 이미 전달 된 값이있는 경우, 한 번에 하나의 뷰만 클래스에서 값을로드하는 데 사용합니다. beginform에서 해당 값에 대한 참조를 제공하지 않으면 값이 손실됩니다.

html.hiddenfor에 대한 큰 동기를 확인하려면 .NET MVC의 뷰에서 컨트롤러로 데이터 전달- "@model"이 강조 표시되지 않음 을 참조하십시오.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.