이것은 바보 같은 노력처럼 보일 것입니다,하지만 그럼에도 불구하고 배우고 싶은 무언가입니다.MVC 3.0의 Html.BeginForm() 다시 작성 및 눈에 거슬리지 자바 스크립트를 유지
지금은 ASP.NET MVC 3.0에서 @using (Html.BeginForm()) {
의 구문을 사용해야하고 이후에 }
을 사용하여 양식 블록을 닫아 멋진 '눈에 잘 띄지 않는 javascript'를 얻고 모든 것을 작성하지 않도록하십시오. 손으로 (괜찮습니다).
어떤 이유로 (Read: *OCD*
) 나는 그것을 좋아하지 않습니다. 나는 정말로 이것을 할 것이다 ..
@Html.BeginForm()
<div class="happy-css">
</div>
@Html.EndForm()
아직 바보 같다? 그래, 각자 자신에게 잘 해줘. 나는 그것이 왜 그것이 어떻게 작용 하는지를 이해하고 그것이 내 취향에 맞도록하고 싶다. 그래서 내가 파기 시작할 첫 번째 장소는 MVC 3.0 소스 그 자체라고 생각했습니다. 그래서 나는 코드 플렉스로 뛰어 올라 BeginForm
확장 메소드를 찾았다.
(http://aspnet.codeplex.com/SourceControl/changeset/view/63452#288009)
그래서 지금은 내 목표를 달성하는 시작하는 방법에 대한 약간의 혼란 스러워요. 코드를 읽으면, 그들은 모두 루트 메소드 (대부분의 확장 메소드가 중복을 피하기 위해 하나의 계층 적 메소드로 간주되기 때문에 모든 메소드가 루트 메소드로 넘어가는 것을 발견했습니다.
private static MvcForm FormHelper(this HtmlHelper htmlHelper, string formAction, FormMethod method, IDictionary<string, object> htmlAttributes) {
TagBuilder tagBuilder = new TagBuilder("form");
tagBuilder.MergeAttributes(htmlAttributes);
// action is implicitly generated, so htmlAttributes take precedence.
tagBuilder.MergeAttribute("action", formAction);
// method is an explicit parameter, so it takes precedence over the htmlAttributes.
tagBuilder.MergeAttribute("method", HtmlHelper.GetFormMethodString(method), true);
HttpResponseBase httpResponse = htmlHelper.ViewContext.HttpContext.Response;
httpResponse.Write(tagBuilder.ToString(TagRenderMode.StartTag));
return new MvcForm(htmlHelper.ViewContext.HttpContext.Response);
}
이 방법은 눈에 잘 띄지 않는 자바 스크립트와 관련이 있습니다. 나는 단순히 .. 지금처럼 내 검증에 넣어 다음
<form action="/Controller/Action" method="post">
및 ...
@Html.ValidationSummary(false)
을 입력하면 나는 눈에 거슬리지 자바 스크립트를하지 않습니다. 그러나 내가 사용한다면
@using (Html.BeginForm()) {
내가 그렇다. 나는 생성 된 마크 업을 조사해 보았는데 실제로 차이점을 발견 할 수 없었다.
이제는 이상하게 보입니다. 난 그냥 입력하면 ...
@Html.BeginForm()
다음은 내 양식의 모든 코드를 넣어 형태 는 작동하고 나는 눈에 거슬리지 자바 스크립트를 얻을 수 있지만 수동 끝에 </form>
를 입력해야합니다. @Html.EndForm()
이 작동하지 않습니다. 그러나 그것의 ontop, 지금 html 바로 아래의 출력 스트림에 쓰여진 텍스트를 얻습니다.
누군가가 나를 깨우 치거나 도와 줄 수 있습니까? 불행하게도 면도기 구문이 지금 좀 더 자세한 도우미를 호출 할 때입니다
@{ Html.BeginForm(...); }
<div> content</div>
@{ Html.EndForm(); }
:
덕분에,이 많은 도움이! – Ciel
양식을 시작과 끝을 별도의 섹션으로 정의해야하므로 많은 도움이되었습니다. 너를 marcind 고맙다. – dreamerkumar
Html.BeginForm 매직을 사용할 때만 눈에 거슬리지 않는 유효성 검사가 왜 효과가 있는지 궁금해하는 사람이 있으면 대답은 http://stackoverflow.com/a/3501759입니다. – bottlenecked