문제

나는 저녁 식사 예제와 같은 동일한 일을하려는 비슷한 게시물을 보았지만 그의 문제를 해결하는 것은 조금 더 깊은 것 같습니다. 기본적으로 나는 CXAN이 잘 작동하도록 검증을 받지만 Firefox에서만 작동합니다. IE7에서 페이지가로드 될 때 다음과 같은 메시지와 함께 즉시 경고 상자를 가져옵니다. 보기 소스에서 이것을 보여줍니다. 이것을 고치기 위해 내가 할 수있는 일에 대한 아이디어는 가장 감사 할 것입니다!

기본적으로 나는 단지 내 신문에 제목과 신체가 있는지 확인하려고 노력하고 있습니다. 뷰 모델에 싸서 있었기 때문에 IE는 이것을 이해하지 못한다고 생각합니다. 어쩌면 내가 틀렸다.

검증에 XVal을 사용하고 있습니다. 내 모델로 뷰 모델을 전달하고 있습니다. 내 뷰 모델은 다음과 같습니다.

public class NewsAdminViewData : ViewModel
{
   public NewsPost NewsPost { get; set; }
   public List<SelectListItem> NewsItem { get; set; }
   public List<SelectListItem> NewsGroup { get; set; }

   public NewsAdminViewData(List<SelectListItem> newsItem, List<SelectListItem> newsGroup, NewsPost newsPost)
   {
      this.NewsItem = newsItem;
      this.NewsGroup = newsGroup;
      this.NewsPost = newsPost;
   }
}

내 견해는 다음과 같습니다.

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

    <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
        <% using (Html.BeginForm())
           {%>
        <div class="moduleContainer">
            <div class="moduleTitle">
                Create News Item
            </div>
            <div class="moduleContent">
                <div>
                    <div>
                        Title:</div>
                    <div>
                        <%= Html.TextBox("Title") %>
                    </div>
                </div>
                <div>
                    <div>
                        &nbsp;</div>
                    <div>
                        <%= Html.TextArea("Body") %>
                    </div>
                </div>
                <div>
                    <div>
                        News Group:
                    </div>
                    <div>
                        <%= Html.DropDownList("NewsGroup")%>
                    </div>
                </div>
                <div>
                    <div>
                        News Item:
                    </div>
                    <div>
                        <%= Html.DropDownList("NewsItem") %>
                    </div>
                </div>
            </div>
            <div class="moduleFooter">
                <%= Html.SubmitButton("btnSubmit", "Add News Post", null, "To add this news post click here.", "#ffd40f")%>
            </div>
        </div>
        <% } %>
        <%= Html.ClientSideValidation<NewsPost>()%>

그리고 마지막으로 내 게시물 조치 :

 [AcceptVerbs(HttpVerbs.Post)]
    public virtual ActionResult Create(/*FormCollection collection*/ NewsPost np)
    {
       NewsPost entity = this.reposNewsPost.New();
       try
       {
          entity.Title = np.Title; 
          entity.NewsPostGUID = System.Guid.NewGuid();
          entity.DateAdded = DateTime.Now;
          entity.DateUpdated = DateTime.Now;
          entity.Body = np.Body; 

          UpdateModel(entity);
          this.reposNewsPost.Insert(entity);
          this.reposNewsPost.SubmitChanges();
          return RedirectToAction("Index");
        }
        catch (RulesException ex)
        {
           ex.AddModelStateErrors(ModelState, "NewsPost");
           return ModelState.IsValid ? RedirectToAction(MVC.News.Actions.Create) 
                        : (ActionResult)View();
        }
     }
도움이 되었습니까?

해결책

나는 당신과 비슷한 문제를 겪었습니다. 솔직히 말해서, 그것은 당신이 내가 가진 것처럼 엉망인 것처럼 보이지는 않지만 아마도 솔루션으로 당신을 안내 할 것입니다.

XVal 클라이언트 유효성 검사를 통한 광산 입력 양식이 페이지에 동적으로로드되었습니다 (jQuery ajax Call). 불행히도, 나는 반환 된 HTML을 부모의 요소들 사이에 이미 '형태'가있는 요소에 배치하고 있음을 간과했습니다. Ajax 요청이기 때문에 페이지에있는 중첩 된 '양식'요소 및 XVal 메소드 "_attachruletodomelement"가 다음과 같은 방식으로 구현됩니다.

 var parentForm = element.parents("form");
        if (parentForm.length != 1)// <-- there can be only one parent form of course
            alert("Error: Element " + element.attr("id") + " is not in a form");

Mine Parentform.lengts는 2였습니다!

나는 당신이 여기에 중첩 된 형태를 가지고 있지 않다는 것을 알지만, 마스터 페이지에는 뭔가가 있습니까? IE7은 중첩 된 형태를 렌더링하고 Firefox는 그렇지 않을 수 있습니다. 또한 입력 컨트롤의 이름을 다르게 이름을 지정하지만 문제의 원인은 아닙니다.

<%= Html.TextBox("np.Title") %>...<%= Html.TextBox("np.Body") %> etc...

그런 다음 ElementPrefix도 설정했습니다.

<%= Html.ClientSideValidation<NewsPost>("np")%>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top