2009-06-18 5 views
0

ASP.Net MVC의 유효성 검사 메시지로 그립을 얻으려고합니다. 내가 그 성 필드가 비어있는 경우 오류 메시지를 표시하도록되어 내 컨트롤러에서이 게시물 방법이ASP.Net MVC 및 유효성 검사 메시지

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server"> 

    <h2>Create User</h2> 

    <%= Html.ValidationSummary("Create was unsuccessful. Please correct the errors and try again.") %> 

    <% using (Html.BeginForm()) {%> 

     <fieldset> 
      <legend>Fields</legend> 
      <p> 
       Username : <%= Html.TextBox("Username") %> 
      </p> 
      <p> 
       Forename : <%= Html.TextBox("Forename") %> 
       <%= Html.ValidationMessage("Forename", "*") %> 
      </p> 
      <p> 
       Surname : <%= Html.TextBox("Surname","") %> 
       <%= Html.ValidationMessage("Surname", "*") %> 
      </p> 
      <p> 
       <input type="submit" value="Create" /> 
      </p> 
     </fieldset> 

    <% } %> 

    <div> 
     <%=Html.ActionLink("Back to List", "Index") %> 
    </div> 

</asp:Content> 

<asp:Content ID="Content2" ContentPlaceHolderID="head" runat="server"> 
    <title><%= ViewData["ProjectTitle"] %> - Create User</title> 
</asp:Content> 

다음 뷰를 가지고, 난 그냥하려고이 기능을 메신저에 다른 논리가 없다 실현 유효성 검사를 끝내 내 머리를 얻을. 나는이 프로그램을 실행하고이 방법은 잘 실행하고 오류를 추가,하지만 응용 프로그램이 전복 만들기 사용자를 저장 클릭하면

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Create(FormCollection formValues) 
    { 
     if (formValues["Surname"] == string.Empty) 
      ViewData.ModelState.AddModelError("Surname", "No way"); 
     return View("Create"); 
    } 

, 그것은 성 텍스트 상자를 생성하고 "뿐만 말한다 뷰에서 선을되도록 만든다 객체의 인스턴스로 설정 "합니다. 성 (姓) 텍스트 상자에 뭔가를 넣으면 에러가 발생하지 않습니다.

나는 정말로 간단한 것을 놓치고 있다고 생각하지만 무엇을 해결할 수 있습니다.

아이디어가 있으십니까?

감사

개빈

+0

배치되어, 당신의 if 문에 널 또는 빈을 테스트해야합니까? –

+0

이 줄에서 일어납니다 성 : <% = Html.TextBox ("성", "") %> – Gavin

+0

흠 나는 두 번째 인수 때문에 그런 것 같아요. ViewData에서 ""(empty) 키를 찾고 객체 참조를 던집니다. –

답변

0

처럼

Surname : <%= Html.TextBox("Surname","") %> 

요구에 아래 라인이 될 수 있습니다 작업.

  ModelState.SetModelValue("Username", new ValueProviderResult(ValueProvider["Username"].AttemptedValue, formValues["Username"], System.Globalization.CultureInfo.CurrentCulture)); 
      ModelState.AddModelError("Username", "Invalid Username"); 

누군가가 왜 이렇게 잘 될지 설명 할 수 있다면 좋겠다. 그렇지 않다면 나는이 대답을 받아 들일 것이다. 나는 내가 정말로해야하지 않는 한 내가 검증하는 영원한 분야에서 이것을 할 필요가 없다.

1

당신이 텍스트 상자에 두 번째 인수를 제거하려고 했습니까? ViewData에서 빈 키를 찾습니다. 나는 아래의 오류를하게 설정하는 라인 위의 내 방법에 setModelValue 줄을 추가 해결책을 찾은 것 같아

Surname : <%= Html.TextBox("Surname") %> 
+0

그래, 먼저 %% Html.TextBox ("성") %> – RichardOD

+0

이 필요합니다. 처음에는 오류가 있었지만 처음에는 오류가 발생했을 때이를 수정했지만 아무런 차이가 없었습니다. – Gavin

+0

흠. 재미있는. 이 경우 오브젝트 참조를 제공해야합니다. 하지만 forename 필드에 대한 유효성 검사 컨트롤을 변경하려고 할 수 있습니다. 성을 제거하고 forename을 위해 그것을 시도하십시오? 같은 경우가 발생합니까? 그런데 –

-1

당신은 메시지 "개체의 인스턴스로 설정되지 않음"입니다

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Create(string Username, string Surname, string Forename) 
{ 
    if (String.IsNullOrEmpty(Surname)) 
    { 
    ModelState.AddModelError("Surname", "No way"); 
    } 

    return View(); 
}