XVALとのViewModelを使います
-
20-09-2019 - |
質問
私はディナーの例でこれと同じことをやろうとした同様のポストを見ましたが、彼は私が少し深くなるように思われる彼の問題を修正しました。基本的に私は、検証がうまく仕事を得るcxanそれだけFirefoxで動作します。 IE7ページのロード時には、私はすぐに次のメッセージと警告ボックスを取得:「エラー:要素のタイトルがフォームではありませんが、」私が実際にレンダリングされるマークアップを投稿することができ、必要に応じて...明らかにそれは、こちらのフォームでありますビューのソースからこれを表示します。私はこれを修正するために何ができるか上の任意のアイデアが最も高く評価されるだろう!
基本的に私はちょうど私のNewsPostは、タイトルと本文を持っていることを確認しようとしています。以来、私はそれは私がIEのdoesntのはかなりこのことを理解して考えているのViewModelに包まれています。たぶん私は間違っています。
私は私の検証のために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>
</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呼び出し)動的にロードされました。残念ながら、私はすでに親要素間の「フォーム」を持っている要素に返された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");
鉱山parentForm.lengtsは2でした!
私は、あなたは確かにこちらのフォームを入れ子になっていないことを見、多分マスターページに何かがあるのでしょうか? IE7は、ネストされたフォームをレンダリングするとFirefoxがないことだろう。 これが問題の原因ではありませんが、また、私は、違った入力コントロールに名前を付けます。
<%= Html.TextBox("np.Title") %>...<%= Html.TextBox("np.Body") %> etc...
と、私はあまりにもelementPrefixを設定します。
<%= Html.ClientSideValidation<NewsPost>("np")%>