2013-07-29 4 views
0

드롭 다운 목록의 선택에 따라 입력란에 입력 한 값에 대한 유효성 검사를 수행하는 기능을 만들었습니다 .. ..suppose 선택한 드롭 다운 목록이 금액 인 경우 텍스트 상자가 10 개 사이에 있어야합니다. t0 20 이처럼 두 개의 유효성 검사가 더 있습니다. 그 목적을 위해 하나의 텍스트 상자와 하나의 dropdwonlist 및 하나의 단추가 내보기에 있습니다.사용자 지정 유효성 검사 속성이 버튼 클릭에 대해 작동하지 않습니다

텍스트 상자에 값을 30으로 입력하고 드롭 다운 목록 항목을 "Amount"로 설정 한 다음 제출 단추를 클릭하면보기에 오류 메시지가 표시되지 않습니다 (텍스트 상자를 비워두고 제출 단추를 누르면 오류 메시지가 표시되지만 표시되지 않음). 유효성을 검사하기 위해 작성된 사용자 정의 함수 자체 서버 측 사람) 는 내가 postValues ​​방법에 중단 점을 넣어 가지고 있지만이

그것에 대해

내가

public class CrossFieldsTxtboxesController : Controller 
    { 
     public ActionResult Index() 
     { 
      var itemsforDropdown = new List<SelectListItem> {    
       new SelectListItem{ Text = "Amount" , Value = "Amount"}, 
       new SelectListItem{Text= "Pound", Value ="Pound"}, 
       new SelectListItem {Text ="Percent", Value ="percent"}    
      }; 
      ViewData["Listitems"] = itemsforDropdown; 
      return View("DdlCrossFields"); 
     } 
     [HttpPost] 
     public ActionResult PostValues(CrossFieldValidation model) 
     { 
      if (!ModelState.IsValid) 
      { 
       return View(model); 
      } 
      else 
      { 
       return RedirectToAction("DdlCrossFields");     
      }    
     }  
    } 

)이 (컨트롤러 부분처럼 수행하고이 내 시야는 ... 타격하지 일부

@model MvcSampleApplication.Models.CrossFieldValidation 
@{ 
    ViewBag.Title = "DdlCrossFields"; 
}  
<h2>DdlCrossFields</h2> 
@using (Html.BeginForm()) 
{ 
    <div class ="editor-field"> 
     @Html.TextBoxFor(m => m.TxtCrossField) 
     @Html.ValidationMessageFor(m=>m.TxtCrossField) 
    </div> 
    @Html.DropDownList("Listitems",ViewData["Listitems"] as SelectList) 
    <input id="PostValues" type="Submit" value="PostValues" /> 
} 

이 내 모델 부분

public class CrossFieldValidation 
{   
    public string DDlList1 
    { get; set; } 

    [Required(ErrorMessage = "Quantity is required")] 
    [Display(Name= "Quantity:")] 
    [ValueMustbeInRange] 
    [NumericAttributes] 
    public string TxtCrossField 
    { get; set; } 
} 

하나 HA는 것 왜 어떤 버튼을 클릭해도 작동하지 않는 아이디어, 어떤 제안도 감사 할 것입니다.

+0

질문은 현재 MVC3 및 MVC4로 태그가 지정됩니다. 당신은 실제로 사용하고 있습니까? –

+0

Visual Studio 2012를 사용하고 있습니다 ... 그리고 mvc 4 –

답변

1

POST 요청을 처리해야하는 작업 (귀하의 경우 PostValues). 당신은 Html.BeginForm의 과부하를 사용하여 명시 적으로 POST 액션 이름을 지정할 수 있습니다 : 내가 옳다 경우

Html.BeginForm("PostValues", "CrossFieldsTxtboxes") 

, 당신의 POST 요청은 Index 행동으로 이동하기 때문에 ModelState.IsValid은이 선택되어 있지 않습니다.

jQuery Unobtrusive validation plugin을 사용하여 클라이언트 측 유효성 검사를 사용할 수 있습니다.

<add key="ClientValidationEnabled" value="true" /> 
<add key="UnobtrusiveJavaScriptEnabled" value="true" /> 

을하지만 지정 유효성 검사 속성은 클라이언트에서 작업을 추가로 자바 스크립트 코드가 필요 참고 : web.config 파일에 다음 키가있는 경우 확인하시기 바랍니다.

+0

웹 구성 파일에서 모든 것을 확인했습니다 okk –

+0

덕분에이 오류가 발생합니다 "ViewData 항목에 'IEnumerable '키가있는 것은 없습니다 'Listitems'. " 이 줄에서 @ Html.DropDownList ("Listitems", ViewData [ "Listitems"] SelectList) ..이게 도움이 되시겠습니까? –

+1

양식을 PostValues에 제출하면 되나요? 'PostValues' 메소드에서'ViewData [ "ListItems"]'를 초기화 할 필요가 있습니다. 리팩터링은 별도의 메소드로리스트 아이템을 만들고'Index'와'PostValues'에서 사용합니다. – takemyoxygen

0

나는 실제로 당신이 포스트를 할 때 실제로 메소드를 호출하는 것을 보지 않습니다 - 당신은 javscript 클릭 핸들러가 있습니까?

당신은 당신이 당신의 Html.BeginForm()에 가고 싶은 방법 및 컨트롤러가 필요하거나보기에 아래 같은 것을 할 수 있습니다 : 당신이를 지정 어디 장소가 표시되지

@Html.ActionLink("Post Values", "PostValues", "CrossFieldsTxtboxesController", null, new { @class = "postValuesButton", onclick = "return false;" }) 
관련 문제