2011-08-20 4 views
0

MVC2 및 C#을 사용하여 ASP에서 정말 간단한 양식을 만들려고합니다. 두 개의 요소와 제출 버튼이 있으며 VS2010의 디자이너를 사용하여 양식을 만들었습니다.ASP.NET MVC2 양식 요소 이름

보기 :

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<dynamic>" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> 
Create 
</asp:Content> 

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 

<form id="create_event" runat="server"> 
<h2>Create</h2> 
<p>Event ID: 
    <asp:TextBox ID="txtEventID" runat="server"></asp:TextBox> 
</p> 
<p>Event Description: 
    <asp:TextBox ID="txtEventDescription" runat="server"></asp:TextBox> 
</p> 
<p> 
    <asp:Button ID="submit" runat="server" Text="Add Event" /> 
</p> 

</form> 

</asp:Content> 

내 컨트롤러에서 폼 요소에 액세스 할 때 지금 갖는있어 문제는, 내가 FormCollection 개체를 사용하여 이상한 키 이름을 얻는다.

컨트롤러 :

public ActionResult Create(FormCollection collection) 
    { 
     try 
     { 
      // TODO: Add insert logic here 
      foreach (var key in collection) 
      { 
       var ks = key.ToString(); 
       var value = collection[key.ToString()]; 
      } 

      return RedirectToAction("Index"); 
     } 
     catch 
     { 
      return View(); 
     } 
    } 

두 컨트롤의 이름 속성이 ctl00 $ MainContent $ txtEventDescription 및 ctl00 $ MainContent $ txtEventID로 런타임에 설정됩니다 키에 사용됩니다. 디자인 타임에 설정 한 ID로 이러한 항목을 참조 할 수있는 방법이 있습니까? id와 같은 값을 가진 name 속성을 추가하려고 시도했지만 작동하지 않았습니다.

감사합니다.

답변

1

양식에서 runat="server"을 제거하십시오. MVC에서는 완전히 필요하지 않습니다. 또한 양식 콜렉션을 사용해서는 안되며 모델 바인딩을 사용해야합니다. <asp:*> 컨트롤을 제거하면 MVC에서는 쓸모가 없습니다. 대신

, 같은, 그것은 공급 Html.BeginForm() 도우미를 사용하는 것이 훨씬 쉽다 <%: Html.TextBoxFor(m => model.property) %>

있지만 Html 헬퍼를 사용

<%: using (Html.BeginForm()) { %> 
    .... your stuff 
<%: } %> 

다시 읽기하면, 나는 당신의 문제가 양식을 사용하고 있다는 것입니다 참조 디자이너가 표준 asp.net 페이지가 아닌 MVC 페이지.

1

이 시도 :

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<YourNamespace.YourModel>" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> 
    Create 
</asp:Content> 

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 

<% using (Html.BeginForm("AddEvent", "YourControllerName", FormMethod.Post, new { id = "create_event" })) 
    { %> 
    <h2>Create</h2> 
    <p>Event ID: <%= Html.TextBox("txtEventID", Model.txtEventID)%> </p> 
    <p>Event Description: <%= Html.TextBox("txtEventDescription", Model.txtEventDescription)%> </p> 
    <button id="submit">Add Event</button> 
    <% } %> 
</asp:Content> 

당신은 속성 'txtEventID'와 'txtEventDescription'와 모델을 만들어야합니다 ...이 그 공간이있는 상속 속성에 추가 할 것입니다 모델입니다 첫 번째 줄 (꺾쇠 괄호 사이).

실수로 고전적인 ASP 컨트롤을 사용하고 있습니다. MVC는 순수한 HTML을 처리하고 HTML 도우미를 사용하여 생성합니다. HTML.Textbook()은 그러한 도우미입니다.

는 ... 문제 -의 - 사실, 그것은 당신과 같이 직선 HTML을 사용할 수 있습니다 ... 헬퍼와 모델을 사용할 필요는 없습니다 :

<p>Event ID: <input type="text" id="txtEventID" name="txtEventID" /> </p> 
<p>Event Description: <input type="text" id="txtEventDescription" name="txtEventDescription" /> </p> 

내 조언 : 여기에 튜토리얼을 통해 실행 http://www.asp.net/mvc/tutorials .

마지막으로, 당신은 모델 접근 방식을 사용하는 경우, 당신은 따라서 귀하의 컨트롤러 동작을 다시 작성할 수 있습니다 :

public ActionResult Create(YourModel Model) 
    { 
     Model.txtEventID ... 
    } 

ASP.NET MVC가 사용하는 '모델 결합'모델에 양식의 값을 바인딩 따라서 FormCollection에 액세스 할 필요가 없습니다.

여기에 동의 할 것이 많지만, 내 조언은 튜토리얼을 통해 기초를 파악하는 것입니다. 너는 그것을 후회하지 않을 것이다.

0

디자이너가 수행 한 작업은 웹 양식에서 사용되는 mtml과 같이 HTML 마크 업을 생성합니다. 필요한 것은 "cryotello"와 같은 것입니다.

당신은 엔티티 표현을 만들어야합니다.

은 당신이 관심을 가질만한 것은 좋은 설명을 가지고이 다음 프로젝트 http://nerddinner.codeplex.com/

또한 좋은 투자는 ASP.NET MVC이 책은 기본적인 것들

는 부하를 포함 스티븐 샌더슨가 될 것이다

행운을 빌어 요