대답은 매우 좋지만 MVC 및 .NET의 최신 릴리스에는 "오래된 학교"FormCollection 및 Request 키 대신 사용하고 싶은 또 다른 방법이 있습니다.
AJAX 또는 FORM POST를 수행하는 양식 태그 내에 포함 된 HTML 스 니펫을 고려하십시오.
<input type="hidden" name="TrackingID"
<input type="text" name="FirstName" id="firstnametext" />
<input type="checkbox" name="IsLegal" value="Do you accept terms and conditions?" />
컨트롤러는 실제로 양식 데이터를 구문 분석하고 정의 된 유형의 매개 변수로 전달하려고합니다. 까다로운 체크 박스를 포함 시켰습니다. 선택하면 "on"텍스트를 반환하고 선택하지 않으면 null을 반환합니다. 그러나 요구 사항은 이러한 정의 된 변수가 반드시 존재해야한다는 것입니다 (nullable (nullable이더라도 기억 string
)하지 않는 한) 그렇지 않으면 AJAX 또는 POST 백이 실패합니다.
[HttpPost]
public ActionResult PostBack(int TrackingID, string FirstName, string IsLegal){
MyData.SaveRequest(TrackingID,FirstName, IsLegal == null ? false : true);
}
면도기 도우미를 사용하지 않고 모델을 다시 게시 할 수도 있습니다. 나는 이것이 몇 번 필요하다는 것을 알게되었습니다.
public Class HomeModel
{
public int HouseNumber { get; set; }
public string StreetAddress { get; set; }
}
HTML 마크 업은 단순히 ...
<input type="text" name="variableName.HouseNumber" id="whateverid" >
컨트롤러 (Razor Engine)는 양식 변수 "variableName"(이름은 원하는대로 유지하지만 일관성을 유지)을 가로 채서이를 빌드하고 MyModel로 캐스트합니다.
[HttpPost]
public ActionResult PostBack(HomeModel variableName){
postBack.HouseNumber; //The value user entered
postBack.StreetAddress; //the default value of NULL.
}
컨트롤러가 모델 (이 경우 HomeModel)을 예상 할 때 모든 필드를 정의 할 필요가 없습니다. 파서가 기본값 (일반적으로 NULL)으로두기 때문입니다. 좋은 점은 마크 업에서 다양한 모델을 혼합하고 일치시킬 수 있으며 포스트 백 구문 분석이 가능한 한 많이 채워질 것입니다. 페이지에서 모델을 정의하거나 도우미를 사용할 필요가 없습니다.
팁 : 컨트롤러의 매개 변수 이름은 HTML 마크 업 "name ="에 정의 된 이름입니다. 모델 이름이 아니라!에서 예상되는 변수의 이름입니다.
사용 List<>
은 마크 업에서 조금 더 복잡합니다.
<input type="text" name="variableNameHere[0].HouseNumber" id="id" value="0">
<input type="text" name="variableNameHere[1].HouseNumber" id="whateverid-x" value="1">
<input type="text" name="variableNameHere[2].HouseNumber" value="2">
<input type="text" name="variableNameHere[3].HouseNumber" id="whateverid22" value="3">
List <>의 인덱스는 항상 0부터 시작해야하며 순차적이어야합니다. 0,1,2,3.
[HttpPost]
public ActionResult PostBack(List<HomeModel> variableNameHere){
int counter = MyHomes.Count()
foreach(var home in MyHomes)
{ ... }
}
사용 IEnumerable<>
비 제로를위한 것은 기반 및 비 순차적 인덱스 다시 게시 할 수 있습니다. 바인더를 돕기 위해 숨겨진 추가 입력을 추가해야합니다.
<input type="hidden" name="variableNameHere.Index" value="278">
<input type="text" name="variableNameHere[278].HouseNumber" id="id" value="3">
<input type="hidden" name="variableNameHere.Index" value="99976">
<input type="text" name="variableNameHere[99976].HouseNumber" id="id3" value="4">
<input type="hidden" name="variableNameHere.Index" value="777">
<input type="text" name="variableNameHere[777].HouseNumber" id="id23" value="5">
그리고 코드는 IEnumerable을 사용하고 ToList()
[HttpPost]
public ActionResult PostBack(IEnumerable<MyModel> variableNameHere){
int counter = variableNameHere.ToList().Count()
foreach(var home in variableNameHere)
{ ... }
}
페이지 당 단일 모델 또는 ViewModel (다른 모델을 연결하여 복잡한 'View'모델을 생성하는 모델)을 사용하는 것이 좋습니다. 제안 된대로 믹싱 및 매칭은 나쁜 습관으로 간주 될 수 있지만 작동하고 읽을 수있는 한 나쁜 것은 아닙니다. 그러나 Razor 엔진의 힘과 유연성을 보여줍니다.
따라서 임의의 항목을 드롭하거나 Razor 도우미의 다른 값을 재정의해야하거나 비정상적인 데이터 조합을 사용하는 단일 양식에 대해 고유 한 도우미를 만들고 싶지 않은 경우 이러한 메서드를 사용하여 추가 데이터.