2014-04-16 6 views
1

컨트롤러에 도달하기 전에 데이터를 수정하고 싶습니다.MVC4에서 컨트롤러에 도달하기 전에 값을 다시 편집하십시오.

우리는 모델 바인더 등을 솔루션을 통해 변경 했으므로이 옵션은 현재로서는 나에게 옵션이 아닙니다. 컨트롤러에 도달하기 전에 입력 한 값을 수정할 수 있는지 알고 싶습니다. (A foreach 내부)

면도기 코드 : 나는 .Replace(...) 같은 것들을 시도했지만 내가 그런 식으로 수정하는 것을 허용하지 않습니다

@Html.EditorFor(x=>x.Value); 

.

모범 사례가 무엇인지 잘 알고 있지만 시간이 많이 필요합니다. 빠른 솔루션을 원하고 나중에 올바른 솔루션을 변경하고 싶습니다. 모두가 그 점을 인정할 수 있습니다!

컨트롤러 코드 : (이 이유는 - 쉼표를 제거해야합니다 (필드에서 사용할 수 있으므로 중지 할 논리를 사용하지 마십시오.) 쉼표로 분리 된 포스트 백을 유지할 수 있도록 무언가로 바꾸고 싶습니다.)

(formData 유형의 FormCollection이다)

var arrayOfValues = formData["x.Value"].Split(','); 

그래서 등의 쉼표로 구분 된 값 - 때때로 그 값은 프레드 존스 것, 1 뉴 스트리트 -> 내가 필요에 완벽하게 허용 항목, 그러나 쉼표로 구분 된 응답을 없애줍니다.

도움이 매우 감사 할 것입니다. 이것은 나의 선호 지역이 아닙니다!

+0

어떻게 당신이 당신의 양식을 게시하는? 아약스를 사용한다면 제출하기 전에 수정할 수 있습니다 :) –

+0

@theghostofc replace() (명시된대로)로 바꾸려고 시도했지만 그렇게 할 수 없습니다. 나는 자바 스크립트를 시도했는데 - foreach 내에서 그 필드로 들어갈 수 없다. - 가능하지 않다는 것을 말하지는 않지만, 나는 확실히 모른다. – Chris

+0

@Murali HTTPPost 내보기에서 컨트롤러 – Chris

답변

0

컨트롤러에 충돌하기 전에 수정하려면 Javascript/Jquery를 사용하여 양식 제출을 포착 한 다음 제출을 수행하기 전에 값을 수정해야합니다.

언제든지 post 메서드에서 모델을 변경할 수 있지만 오류를 확인하거나 모델을 다시보기로 보내려면 모델 상태가 후드에서 사용된다는 점에 유의하십시오.

컨트롤러에서 모델을 변경 한 다음 모델 상태에서 변경된 필드를 지우거나 전체 모델 상태를 지우는 것이 좋습니다. 그렇지 않으면 변경 사항이 표시되지 않고 다음을 수행해야합니다. 모델과 modelstate는 바인딩에 도착 :

model.field1 = newval; 
ModelState.Remove("field1");//forces rebind 

또는

model.field1 = newval; 
ModelState.Clear();//clears modelstate fully 
관련 문제