2009-02-02 2 views
28

나는 과거에 자주 사용했던 방법을 사용하여 매우 간단한 폼을 게시하고 있습니다. 긴 설명을 입력하는 대신 내 코드를 표시하는 것이 더 쉬울 수 있습니다.FormCollection ASP.NET-MVC의 폼 포스트에서 비움

<% Html.BeginForm("CreateMarketingType", "ListMaintenance"); %> 
    <div id="ListMaintenanceContainer"> 
     <table> 
      <tr> 
       <th>Marketing Type Id</th> 
       <th>Marketing Type Name</th> 
      </tr>      
       <%foreach (MarketingType marketingType in ViewData.Model.MarketingTypes) %> 
       <%{ %> 
        <tr> 
         <td><%= marketingType.MarketingTypeId.ToString() %></td> 
         <td><%= marketingType.MarketingTypeName %></td> 
        </tr> 
       <%} %> 
     </table> 
     <div> 
      <fieldset id="fsSaveNewMarketingType"> 
       <legend>Add New Marketing Type</legend> 
       <label for="txtNewMarketingTypeName">New Marketing Type Name:</label> 
       <input type="text" id="txtNewMarketingTypeName" /> 
       <input type="submit" value="Save" id="CreateMarketingType" /> 
      </fieldset> 
     </div>      
    </div> 
<% Html.EndForm();%> 

을 그리고 여기에 컨트롤러 코드입니다 : 다음은 HTML입니다

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult CreateMarketingType(FormCollection form) 
{ 
    string newMarketingTypeName = Request.Form["txtNewMarketingTypeName"].ToString(); 

    MarketingType newMarketingType = new MarketingType() { MarketingTypeName = newMarketingTypeName }; 

    _marketingTypeRepository.AddNewMarketingType(newMarketingType); 

    return View("ListMaintenance", GetModel()); 
} 

가 양식 버튼 게시물을 제출하고, 메서드가 호출됩니다,하지만 내 매개 변수에 정의 된 양식 객체가 비어 있습니다. 또한 Request.Form 시도하고 동일한 결과 얻을. 내가 여기서 뭔가를 놓치고 있니?

답변

82

입력 사항에 이름 속성이 없습니다. 이름 없음 = FormCollection에 없습니다.

+8

아쉽게도 WebForms에서 자라납니다! id 속성이 값을 양식에 전달했다고 생각했습니다. 답장을 보내 주셔서 감사합니다!! –

+1

감사합니다. 나는 id 속성이 그것을 할 것이라고 생각했다 ... –

+0

모든 것이 겉으로보기에는 이드를 사용하는쪽으로 향하고 있기 때문에 놀랍다. 그들은 어쨌든 .. 나처럼 나에게 보이지 않는 것들. –

0

위시 나는 간단한 설명으로 게시 할 수 있지만 권한이 없습니다 ... 모든 이름 속성을 추가했지만 여전히 기쁨은 없습니다. 이름 속성을 양식 자체에 추가해야합니다. htmlAttributes를 허용하는 HTML.BeginForm에 대한 오버로드를 사용해야합니다.

3

이 문제가 있었는데 양식을 제출하기 전에 (UX 기능으로) 모든 입력 컨트롤을 비활성화했음을 깨달았습니다.

+0

필드를 비활성화하면 FormCollection에서 해당 필드가 제거됩니까? 나는 같은 문제가있는 것 같다. – WEFX

0

이 질문에 대한 답변은 이미 확인되었습니다. 다음은 MVC 뷰에서 폼 컬렉션이 비어있을 때 사용한 또 다른 방법입니다. JavaScript/jQuery를 사용하여 이름 - 값 쌍을 양식에 추가되는 숨겨진 컨트롤로 설정합니다.

자바 스크립트/jQuery를

$("#btnExport").click(function (event) { 
       event.preventDefault(); 

       //Append the parameter to the form 
       var practiceVal = $('#Practice').val(); 
       $('<input />').attr('type', 'hidden') 
        .attr('name', "Practice").attr('value', practiceVal) 
        .appendTo('#formHome'); 

       //Submit 
       $('#formHome').submit(); 
      }); 

양식

<form id="formHome" method="post"> 
</form> 

양식이 처리를 위해 제출되면 Forms

를 참조하십시오, 일부 컨트롤은 자신의 name 파가 현재 값으로 비춰지고이 쌍은 양식과 함께 제출됩니다.

관련 문제