Html.Hidden과 Html.HiddenFor의 차이점은 무엇입니까?
MSDN에서 Html.HiddenFor에 대한 좋은 정의를 찾을 수 있지만 Html.Hidden에서 찾을 수있는 유일한 것은 문제와 관련이 있습니다.
누군가 나에게 좋은 정의와 예를 줄 수 있습니까?
대부분의 MVC 도우미 메서드에는 XXXFor 변형이 있습니다. 구체적인 모델 클래스와 함께 사용하기위한 것입니다. 이 아이디어는 도우미가 람다에서 지정한 속성을 기반으로 양식 입력 컨트롤에 대한 적절한 "이름"특성을 파생 할 수 있도록하는 것입니다. 즉, 모델 속성을 뷰와 상호 연결하기 위해 사용해야하는 "매직 문자열"을 제거 할 수 있습니다. 예를 들면 :
Html.Hidden("Name", "Value")
결과 :
<input id="Name" name="Name" type="hidden" value="Value">
컨트롤러에서 다음과 같은 작업이있을 수 있습니다.
[HttpPost]
public ActionResult MyAction(MyModel model)
{
}
그리고 다음과 같은 모델 :
public class MyModel
{
public string Name { get; set; }
}
Html.Hidden위에서 사용한 원시 는 Name모델 의 속성과 상관 관계가 있습니다. 그러나 속성의 "Name"값을 문자열 ( "Name")을 사용하여 지정해야한다는 것은 다소 불쾌합니다. Name모델 에서 속성의 이름을 바꾸면 코드가 손상되고 오류를 파악하기가 다소 어려워집니다. 반면에를 사용 HiddenFor하면 다음으로부터 보호됩니다.
Html.HiddenFor(x => x.Name, "Value");
이제 Name속성의 이름을 바꾸면 속성을 찾을 수 없다는 명시 적 런타임 오류가 발생합니다. 또한을 입력 한 후 멤버 드롭 다운을 가져 오는 것과 같은 정적 분석의 다른 이점을 얻을 수 x.있습니다.
Html.Hidden은 숨겨진 입력을 생성하지만 해당 필드와 값에 부여 할 이름과 모든 속성을 지정해야하며 Html.HiddenFor전달하는 객체에 대한 숨겨진 입력을 생성하는 동안 다음과 같이 보입니다. :
Html.Hidden("yourProperty",model.yourProperty);
Html.HiddenFor(m => m.yourProperty)
이 경우 출력은 동일합니다!
HtmlHelper 클래스의 모든 메서드 에는 For접미사 가있는 쌍이 있습니다. Html.Hidden 은 사용자가 제공해야하는 인수로 문자열을 사용하지만 Html.HiddenFor 는 보기가 강력한 형식의보기 인 경우 이점을 얻을 수 있고 해당 메서드에 다음과 같은 람다 식을 제공 할 수 있는 Expression 을 사용합니다.
o=>o.SomeProperty
Html.Hidden 메서드 를 사용하는 경우 "SomeProperty"대신 .
Html.Hidden ( 'name', 'value')는 name = 'name'및 value = 'value'인 숨겨진 태그를 만듭니다.
Html.HiddenFor (x => x.nameProp)는 이름이 'nameProp'이고 값이 x.nameProp 인 숨겨진 태그를 만듭니다.
액면가에서 이들은 유사한 일을하는 것으로 보이며 하나는 다른 것보다 편리합니다. 그러나 실제 값은 모델 바인딩에 있습니다. MVC가 html을 모델에 연결하려고 할 때 속성의 이름이 있어야하며 Html.Hidden의 경우 'nameProp'가 아닌 'name'을 선택 했으므로 바인딩이 작동하지 않습니다. 사용자 지정 바인딩 개체가 있거나 양식 데이터에서 값을 가져와야합니다. 페이지를 다시 표시하는 경우 모델을 다시 값으로 설정해야합니다.
따라서 Html.Hidden을 사용할 수 있지만 이름이 잘못되거나 모델에서 속성 이름을 변경하면 양식을 제출할 때 자동 바인딩이 실패합니다. 그러나 유형 확인 식을 사용하면 코드 완성이 발생하고 속성 이름을 변경하면 컴파일 시간 오류가 발생합니다. 그런 다음 양식에 올바른 이름이 있음이 보장됩니다.
MVC의 더 나은 기능 중 하나입니다.
Html.Hidden 및 Html.HiddenFor는 컨트롤러에서 액션 메서드로 대기 한 이름-값 쌍을 생성하는 데 사용됩니다. 샘플 사용 (*) :
@using (Html.BeginForm("RemoveFromCart", "Cart")) {
@Html.Hidden("ProductId", line.Product.ProductID)
@Html.HiddenFor(x => x.ReturnUrl)
<input class="btn btn-sm btn-warning"
type="submit" value="Remove" />
}
액션 메서드가 "ProductId"를 기다리는 경우 (Html.Hidden 또는 Html.HiddenFor)를 사용하여 형식으로이 이름을 생성해야합니다. 강력한 형식의 모델로이 이름을 생성 할 수없는 경우이 이름을 "ProductId"문자열입니다.
public ViewResult RemoveFromCart(int productId, string returnUrl){...}
If I had written Html.HiddenFor(x => line.Product.ProductID), the helper would render a hidden field with the name "line.Product.ProductID". The name of the field would not match the names of the parameters for the "RemoveFromCart" action method which waiting the name of "ProductId". This would prevent the default model binders from working, so the MVC Framework would not be able to call the method.
*Adam Freeman (Apress - Pro ASP.Net MVC 5)
'Program Club' 카테고리의 다른 글
| 문자열 인덱스가있는 Python 배열 (0) | 2020.12.03 |
|---|---|
| 상단에 행을 삽입 할 때 uitableview를 정적으로 유지 (0) | 2020.12.03 |
| Android Marshmallow : Espresso로 권한을 테스트 하시겠습니까? (0) | 2020.12.02 |
| iPhone SDK에 새 글꼴을 포함하고 사용하는 방법은 무엇입니까? (0) | 2020.12.02 |
| 가변 깊이가있는 다단계 defaultdict? (0) | 2020.12.02 |