سؤال

ورأيت وظيفة مماثلة التي كانت تحاول أن تفعل هذا الشيء نفسه مع المثال العشاء، لكنه ثابت يبدو الألغام قضيته أن يكون أعمق قليلا. أساسا أنا cxan الحصول على التحقق من صحة العمل على ما يرام لكنه يعمل فقط في فايرفوكس. في IE7 عند تحميل الصفحة، وعلى الفور الحصول على مربع التنبيه مع الرسالة التالية: "خطأ: عنوان العنصر غير موجود في نموذج" ... ومن الواضح أنه في النموذج هنا، إذا لزم الأمر أستطيع الرد على العلامات التي يتم تقديمها في الواقع من مصدر العرض لإظهار هذا. أي أفكار حول ما يمكنني القيام به لإصلاح هذا من شأنه أن يكون أكثر تقدير!

وأساسا أنا مجرد محاولة للتأكد من بلدي NewsPost لها عنوان والجسم. منذ لدي اختتم في ViewModel أنا أفكر IE دوسنت أفهم تماما هذا. ربما أكون مخطئا.

وأستخدمه xVal لبلدي التحقق من الصحة. أنا تمرير ViewModel في بلدي كما النموذجي. بلدي ViewModel يشبه هذا:

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 حيوي (مسج دعوة اياكس) في الصفحة. للأسف، وأنا إغفال أن كنت وضع أتش تي أم أل عاد إلى العنصر الذي بالفعل 'شكل' بين عناصر الآباء. لأنه كان طلب اياكس، المتداخلة 'شكل' العناصر التي ينفذ موجودة على الصفحة، وطريقة 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");

وكانت الألغام parentForm.lengts 2!

وأنا أرى أن لم يكن لديك المداخلات هنا بالتأكيد، ولكن ربما في صفحة رئيسية ليس هناك شيء؟ يمكن أن يكون ذلك IE7 يجعل أشكال متداخلة وفايرفوكس لا. أيضا، وأود أن اسم ضوابط مدخلات مختلفة، على الرغم من أن هذا لا ينبغي أن يكون مصدر المشكلة:

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

وثم أود أن مجموعة elementPrefix أيضا:

<%= Html.ClientSideValidation<NewsPost>("np")%>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top