[원] ASP.NET MVC 3 Razor 폼은 좀 더 직설적으로 볼 수 있어요.
3581 단어 asp.net
본인의 관례에 따라 개편할 때 주제와 무관한 말을 먼저 하려고 했습니다. 원래 블로그를 쓰는 이 습관을 견지하려고 했습니다. 우수한 제품이 나오지 않아도 약간의 물품이 나올 수 있고 작은 문제에 대해 해결 방안을 제공할 수 있습니다. 그러나 올해 8월은 정말 다사다난한 가을이라고 할 수 있습니다. 많은 일들이 한데 모여서 새로운 것을 배울 시간이 거의 없습니다.블로그를 쓰는 것은 말할 것도 없고 9월이 반쯤 지나갈 것 같아서 어제서야 작은 것 하나를 참았는데, 아직 머릿수만 채울 수 있을 것 같았다.
ASP를 사용할 예정입니다.NET MVC가 회사의 어떤 제품을 실현했습니다. 어제 문제가 발생했습니다. 이상이 발생했을 때 제출하기 전의 페이지로 돌아간 후에 원래 입력한 내용이 없어졌습니다. 이것은 큰 문제입니다. 예전에 제가 를 썼던 것을 기억합니다.한 문장에 이미 이 문제를 해결했는데 어째서 제출하기 전의 입력이 보이지 않습니까? 이전의 코드를 열어 보니 문제가 발견되었습니다.
현재 코드의 양식 코드는 다음과 같습니다.
<input id="txtName" name="Name" type="text" />
이전에 효과가 나타날 수 있는 폼 코드는 다음과 같다.
@Html.TextBoxFor(x => x.Name)
테스트를 통해 Html의 확장 방법을 사용하여 생성된 라벨은 제출하기 전의 값을 얻을 수 있으나, 자신이 직접 쓴 것은 안 된다는 것을 알 수 있습니다. 따라서 이 TextBox 확장 방법에는 반드시 어떤 메커니즘이 있어 라벨에 자동으로 값을 채울 수 있습니다.처음에 동료와 토론을 한 후에 @Html을 사용하라고 느꼈습니다.TextBoxFor 방법의 장점은 Name 속성의 이름을 바꾸면 VS 코드를 자동으로 재구성해서 *.cshtml 코드의 x.Name은 자동으로 새로운 속성 이름으로 업데이트되었습니다. 테스트를 한 결과 원래 이런 일이 아니었음을 발견했습니다. 예를 들어 Pname은 VS 재구성 코드를 사용했는데 보기에서 속성 이름이 바뀌지 않았음을 발견했습니다.그리고 만약에 Html의 확장 방법을 사용한다면 문제가 있는 것 같다. 가장 중요한 것은 직관적이지 않다는 것이다. 현재의 Razor 엔진에서 뚜렷하지 않다. 어차피 디자이너도 없지만 나중에 Razor 엔진에 디자이너 기능이 생기면 기본적으로 @Html를 사용한다고 단정할 수 있다.TextBoxFor () 방식은 보이는 대로 효과를 내기 어려울 뿐만 아니라 cshtml 페이지에서 디자이너를 사용할 수 없습니다. 코드를 볼 때 보기에서 @Html를 사용하면 됩니다.XXX도 직관적이지 않다. Html 확장 방법을 사용하면 코드를 재구성하는 데 유리하지 않고 직관적이지 않기 때문에 Html 라벨을 사용하는 이유가 충분히 변한 것 같다. 이런 방법을 사용하면 C#를 할 줄 모르는 사람도 페이지를 쓸 수 있다.
이런 생각의 구동 아래, 스스로 탭 값을 채우는 확장 방법을 생각해 낸다.그래서 ASP를 열었습니다.NET MVC 3 소스 코드, 이 TextBox 내부에서 도대체 무엇을 하고 있는지, 왜 모델(ViewData.Model)의 값과 ViewData를 사용할 수 있는지 살펴보자.ModelState의 값이 탭에 채워져서 한 걸음 한 걸음 찾아보면 원래 실현 방법이 비교적 간단하고 코드에 직접 올라가는 것을 발견할 수 있다.
public static class HtmlValueExtension
{
public static MvcHtmlString Value<TModel, TProperty>(this HtmlHelper<TModel> html, Expression<Func<TModel, TProperty>> expression)
{
ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
return Value(html, metadata.PropertyName);
}
public static MvcHtmlString Value(this HtmlHelper html, string name)
{
string attemptedValue = null;
ModelState modelState;
if (html.ViewData.ModelState.TryGetValue(name, out modelState))
{
if (modelState.Value != null)
{
attemptedValue = modelState.Value.ConvertTo(typeof(string), null /* culture */).ToString();
}
}
return new MvcHtmlString(attemptedValue ?? Convert.ToString(html.ViewData.Eval(name), CultureInfo.CurrentCulture));
}
}
HtmlHelper
이 클래스를 사용하면 페이지에서 다음 코드를 사용하여 호출됩니다.
<input id="txtDeptName" name="Name" type="text" value="@Html.Value(x => x.Name)"/>
이렇게 하면 @Html에 도달할 수 있습니다.TextBox()와 같은 효과가 있었지만 보기의 코드 측면에서 볼 때 많이 직관적이었고 앞으로 Razor 엔진에 디자이너가 생기면 디버깅을 하지 않아도 페이지 효과를 볼 수 있을 것 같다.
마지막으로 Razor의 보기에서 폼 탭을 정의한다면, 이 폼 탭의 값은 모델의 속성에 대응하지 않습니다. 제출 전의 값을 가져오려면 Request를 사용하십시오.Params[TagName]를 클릭하면 됩니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
작업 중 문제 해결 - (win 2003 asp. net) Session 과 페이지 전송 방법 으로 해결 방안 을 정상적으로 사용 할 수 없습니다.또한 F 는 처음에 우리 의 BP & IT 프로젝트 팀 이 Forms 폼 검증 을 사용 했다 고 판단 할 수 있 습 니 다. 페이지 를 뛰 어 넘 는 것 은http://hr.bingjun.cc/MyTask/MyTas...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.