0

私はこの答えをテストするためにViewModelを作成しました:送信ボタンmvc 3をクリックした後、List <T>プロパティを持つViewModelを埋める方法は?

チェックボックスリストを確認する必要がありますWeeklyModel.AlsoWeeklyViewModel。チェックボックスにすべてをリストしたい。以下の私のエラーをナットします。それは愚かなエラーです。私はそれを解決する方法を解決するために共鳴を理解することができませんか?ありがとう...参考にしてください(artcileが必要なもの)記事:モデルの表示、パーシャル、テンプレートを使用し、MVC 3 モデルで子バインディングを処理するのはいつですか?


   public class WeeklyModel

        {
            public string Name { get; set; }
            public string Value { get; set; }
            public bool IsChecked { get; set; }
        }


       public class WeeklyViewModel
        {
            public IEnumerable<WeeklyModel> Settings { get; set; }
            public WeeklyViewModel()
            {
                Settings = new List<WeeklyModel>();
            }

        }

コントローラ:


 public ActionResult CreateWeekly()
       {
           var model = new WeeklyViewModel();
            List<WeeklyModel> li = new List<WeeklyModel>();
            li.Add( new WeeklyModel(){ Name="Monday", Value="mon", IsChecked=false});
            model.Settings = li;
               return View(model);
       }
       [HttpPost]
        public ActionResult CreateWeekly( WeeklyViewModel weekly)
       {

           return View("CreateWeekly", weekly);
       }

私はViews/Trigger / EditorTemplates / WeeklyModels.aspxを作成しました:


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

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

</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<%:Html.CheckBoxFor(m=>m.IsChecked) %>
<%:Html.LabelFor(m=>m.IsChecked,Model.Name) %>
<%:Html.HiddenFor(m=>m.Name) %>
<%:Html.HiddenFor(m=>m.Value) %>

</asp:Content>

意見 :


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

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    CreateWeekly
</asp:Content>

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

<% 

    using (Html.BeginForm())
    {
          %>

      <div>
     <%:Html.EditorFor(m => m.Settings)%>
      </div>
    <br />
       <input value="GenerateForWeekly" name="submitButton" type="submit" />
          <%} %>
</asp:Content>

   

このエラーを解決する方法:

System.ArgumentException:同じキーを持つアイテムがすでに追加されています。System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)at System.Collections.Generic.Dictionary 2.Insert(TKey key, TValue value, Boolean add) at System.Collections.Generic.Dictionary2.Add(TKey key、TValue value)at Transformer.NET.Token.ParseAnchors()at Transformer.NET.TextTransformer.Parse(リスト1 tokensType, Dictionary2変数)Transformer.NET.TextTransformer.Transform(List1 tokensType, Dictionary2つの変数)でTransformer.NET.TextTransformer.Transform(List`1 tokensType)でTransformer.NET.TextTransformer.Transform()でExt.Net.ExtNetTransformer.Transform(String text)でExt.Net.InitScriptFilter.Transform()でExt.Net.InitScriptFilter.Flush()at System.Web.HttpWriter.Filter(Boolean finalFiltering)at System.Web.HttpResponse.FilterOutput()at System.Web.HttpApplication.CallFilterExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute( )System.Web.HttpApplication.ExecuteStep(IExecutionStep step、Boolean&completedSynchronously)

4

1 に答える 1

2

エディターテンプレートは、ページ.ascxではなくコントロールである必要があり.aspxます。また、ファイルの名前が間違っています。名前は付けられていますが、クラスが呼び出され、ではないためWeeklyModels.aspx、正しい名前はWeeklyModel.ascx(なしで)です。sWeeklyModelWeeklyModels

したがって、内部~/Views/Shared/EditorTemplates/WeeklyModel.ascxに次のように配置できます。

<%@ Control 
    Language="C#" 
    Inherits="System.Web.Mvc.ViewUserControl<GenSystem.Models.WeeklyModels>" 
%>
<%= Html.CheckBoxFor(m => m.IsChecked) %>
<%= Html.LabelFor(m => m.IsChecked, Model.Name) %>
<%= Html.HiddenFor(m => m.Name) %>
<%= Html.HiddenFor(m => m.Value) %>

そしてあなたのメインビューの内側CreateWeekly.aspx

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

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    CreateWeekly
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <% using (Html.BeginForm()) { %>
        <div>
            <%= Html.EditorFor(m => m.Settings) %>
        </div>
        <br />
        <input value="GenerateForWeekly" name="submitButton" type="submit" />
    <% } %>
</asp:Content>
于 2012-07-09T11:25:01.280 に答える