HTTPPOST에서 양식 값을 검색하는 방법, 사전 또는?
다음과 같은 조치 방법이 있는 MVC 컨트롤러가 있습니다.
[HttpPost]
public ActionResult SubmitAction()
{
// Get Post Params Here
... return something ...
}
양식은 단순 텍스트 상자가 있는 단순하지 않은 양식입니다.
질문.
매개 변수 값에 액세스하는 방법은 무엇입니까?
저는 뷰에서 게시하는 것이 아니라 외부에서 게시하는 것입니다.액세스할 수 있는 키/값 쌍 컬렉션이 있는 것 같습니다.
나는 노력했다.Request.Params.Get("simpleTextBox");그러나 "죄송합니다. 요청을 처리하는 동안 오류가 발생했습니다."라는 오류가 반환됩니다.
컨트롤러 작업이 양식 입력 이름을 반영하는 오브젝트를 가져오도록 할 수 있으며 기본 모델 바인더가 자동으로 이 오브젝트를 작성합니다.
[HttpPost]
public ActionResult SubmitAction(SomeModel model)
{
var value1 = model.SimpleProp1;
var value2 = model.SimpleProp2;
var value3 = model.ComplexProp1.SimpleProp1;
...
... return something ...
}
또 다른 방법(분명히 추악함)은 다음과 같습니다.
[HttpPost]
public ActionResult SubmitAction()
{
var value1 = Request["SimpleProp1"];
var value2 = Request["SimpleProp2"];
var value3 = Request["ComplexProp1.SimpleProp1"];
...
... return something ...
}
간단히, 당신은 사용할 수 있습니다.FormCollection예:
[HttpPost]
public ActionResult SubmitAction(FormCollection collection)
{
// Get Post Params Here
string var1 = collection["var1"];
}
또한 Form 값으로 매핑된 클래스를 사용할 수 있으며 asp.net mvc 엔진이 자동으로 이 클래스를 채웁니다.
//Defined in another file
class MyForm
{
public string var1 { get; set; }
}
[HttpPost]
public ActionResult SubmitAction(MyForm form)
{
string var1 = form1.Var1;
}
답변은 매우 좋지만 MVC의 최신 릴리스 및 에 다른 방법이 있습니다."오래된" 양식 수집 및 요청 키 대신 내가 정말로 사용하기 좋아하는 NET.
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이 아닌 한).string(null 가능)). 그렇지 않으면 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" >
그러면 컨트롤러(레이저 엔진)가 양식 변수 "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">
목록의 색인 <> 항상 0을 기반으로 하고 순차적이어야 합니다. 0,1,2,3.
[HttpPost]
public ActionResult PostBack(List<HomeModel> variableNameHere){
int counter = MyHomes.Count()
foreach(var home in MyHomes)
{ ... }
}
용사를 합니다.IEnumerable<>0이 아닌 인덱스 및 비순차 인덱스의 경우 사후 처리됩니다.우리는 바인더를 돕기 위해 숨겨진 입력을 추가해야 합니다.
<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">
하고 그고코을는 IEnumberable을 호출하기만 .ToList()
[HttpPost]
public ActionResult PostBack(IEnumerable<MyModel> variableNameHere){
int counter = variableNameHere.ToList().Count()
foreach(var home in variableNameHere)
{ ... }
}
페이지당 단일 모델 또는 보기 모델(복잡한 '보기' 모델을 만들기 위해 다른 모델이 포함된 모델)을 사용하는 것이 좋습니다.제안된 대로 혼합하고 일치시키는 것은 나쁜 관행으로 간주될 수 있지만, 작동하고 읽을 수 있는 한 나쁘지 않습니다.그러나 레이저 엔진의 힘과 유연성을 보여줍니다.
따라서 임의의 데이터를 사용하거나 레이저 도우미의 다른 값을 무시해야 하거나 데이터의 특이한 조합을 사용하는 단일 양식에 대해 자신만의 도우미를 만들고 싶지 않은 경우 이러한 방법을 사용하여 추가 데이터를 빠르게 수용할 수 있습니다.
바인딩 Http 요청에서 폼 Http에서 직접 폼 데이터를 참조하십시오.FormCollection다음을 사용할 수 있습니다.
[HttpPost]
public ActionResult SubmitAction() {
// This will return an string array of all keys in the form.
// NOTE: you specify the keys in form by the name attributes e.g:
// <input name="this is the key" value="some value" type="test" />
var keys = Request.Form.AllKeys;
// This will return the value for the keys.
var value1 = Request.Form.Get(keys[0]);
var value2 = Request.Form.Get(keys[1]);
}
언급URL : https://stackoverflow.com/questions/5088450/how-to-retrieve-form-values-from-httppost-dictionary-or
'programing' 카테고리의 다른 글
| 이클립스의 Android Device Chooser가 내 Android 장치를 표시하지 않는 이유는 무엇입니까? (0) | 2023.04.27 |
|---|---|
| Git 상태 줄 끝 무시 / 동일한 파일 / Windows & Linux 환경 / 드롭박스 / mold (0) | 2023.04.27 |
| WPF 프리뷰이벤트란? (0) | 2023.04.22 |
| 변수를 사용한 Excel vba 콜서브루틴 (0) | 2023.04.22 |
| Azure WebApp URL 이름을 변경하는 방법 (0) | 2023.04.22 |