1

MVC 3では、DropDownListをタプルにバインドする必要があります...次のエラーが表示されます。

ここで私が間違っていることを教えていただけますか?ありがとう

エラー

DataBinding: 'System.Tuple`2[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]' does not contain a property with the name 'Value'.

かみそりで

@Html.DropDownListFor(
    x => x.RemindersList,
    new SelectList(Model.RemindersList, "Value", "Text")
)

クラス(ViewModelに渡されるインスタンス)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace AshtonEventsMobile
{
    public class Reminders
    {
        public List<Tuple<int, string>> TimeSpanText { get; set; }


        // We are setting the default values using the Costructor
        public Reminders()
        {
            List<Tuple<int, string>> timeSpanText = new List<Tuple<int, string>>();

            Tuple<int, string> reminder0 = new Tuple<int, string>(0, "None");
            timeSpanText.Add(reminder0);

            Tuple<int, string> reminder1 = new Tuple<int, string>(300, "5 minutes before");
            timeSpanText.Add(reminder1);

            Tuple<int, string> reminder2 = new Tuple<int, string>(900, "15 minutes before");
            timeSpanText.Add(reminder2);

            Tuple<int, string> reminder3 = new Tuple<int, string>(1800, "30 minutes before");
            timeSpanText.Add(reminder3);

            Tuple<int, string> reminder4 = new Tuple<int, string>(3600, "1 hour before");
            timeSpanText.Add(reminder4);

            Tuple<int, string> reminder5 = new Tuple<int, string>(7200, "2 hours before");
            timeSpanText.Add(reminder5);

            Tuple<int, string> reminder6 = new Tuple<int, string>(86400, "1 day before");
            timeSpanText.Add(reminder6);

            Tuple<int, string> reminder7 = new Tuple<int, string>(172800, "2 day before");
            timeSpanText.Add(reminder7);

            TimeSpanText = timeSpanText;
        }

    }
}
4

3 に答える 3

5

エラーはそれを要約します-それは確かにという名前のプロパティを持っていませんValue。タイプのタプルにTuple<T1, T2>はプロパティがItem1ありItem2、MSDNの詳細についてはこちらをご覧ください

于 2013-01-21T15:32:14.937 に答える
4

SelectListItemタプルを使用する代わりに、このためのコレクションを使用できます。

リマインダーのためにビューモデルに新しいプロパティを追加します

public class AddProgramViewModel
{
  //Your other properties here as well

  public string SelectedReminder { set;get;}
  public List<SelectListItem> ReminderList { set;get;}
  public AddProgramViewModel()
  {
     ReminderList=new List<SelectListItem>();
  }
}

GETアクションメソッドで、それを初期化してビューに送信します。

public ActionResult AddProgram()
{
  var vm=new AddProgramViewModel();

  vm.ReminderList.Add(new SelectListItem { Value="0", Text="None"});
  vm.ReminderList.Add(new SelectListItem { Value="300", Text="5 minutes"});
  //Add more as needed
  //(you may get from DB and add instead of hard coding like this)
}

そして、ビューでは、強くタイプされていますAddProgramViewModel

@model AddProgramViewModel
@using(Html.Beingform())
{
  @Html.DropDownListFor(x => x.SelectedReminder,
                 new SelectList(Model.RemindersList, "Value", "Text"),"select")
  <input type="submit" />
}
于 2013-01-21T15:46:56.580 に答える
0

月のIDと名前を生成するメソッドがあります

private List<Tuple<int,string>> generateMonths()
    {
        List<Tuple<int, string>> list = new List<Tuple<int, string>>();
        int[] monthids = new int[12] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
        string[] monthName = new string[12] { "January", "Februray", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" };
        for (int i = 0; i < 12; i++)
        {
            list.Add(new Tuple<int, string>(monthids[i], monthName[i]));
        }

        return list;
    }

これは私のドロップダウン(asp:dropdownlist)をバインドするメソッドです

Item1プロパティには月のIDが含まれ、Item2プロパティには月の名前が含まれます

private void bindMonthsDDL()
        {
            var list=generateMonths();

            if (list.Count > 0)
            {
                ddlMonth.DataSource = list;
                ddlMonth.DataTextField = "Item2";
                ddlMonth.DataValueField = "Item1";
            }
            else
            {
                ddlMonth.DataSource = "";
                
            }
            ddlMonth.DataBind();
        }
于 2020-06-24T06:28:39.930 に答える