私はカスタムModelBinderを書き、これは私のコードです
using System;
using System.Web.Mvc;
namespace GetOrganized.Code
{
public class DateModelBinder : IModelBinder
{
#region IModelBinder Members
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
if (bindingContext == null)
{
throw new ArgumentException("bindingContext");
}
DateTime theDate = default(DateTime);
var day = FormPostedData<int>(bindingContext, "day");
var month = FormPostedData<int>(bindingContext, "month");
var year = FormPostedData<int>(bindingContext, "year");
return CreateDateOrDefault(year, month, day, theDate);
}
#endregion
private static T FormPostedData<T>(ModelBindingContext context, string id)
{
if (string.IsNullOrEmpty(id))
return default(T);
string key = string.Format("{0}.{1}", context.ModelName, id);
ValueProviderResult result = context.ValueProvider.GetValue(key);
if (result == null && context.FallbackToEmptyPrefix)
{
result = context.ValueProvider.GetValue(id);
if (result == null)
{
return default(T);
}
}
context.ModelState.SetModelValue(id, result);
T valueToReturn = default(T);
try
{
if (result != null) valueToReturn = (T) result.ConvertTo(typeof (T));
}
catch
{
}
return valueToReturn;
}
private DateTime CreateDateOrDefault(Int32 year, Int32 month, Int32 day, DateTime? defaultDate)
{
DateTime theDate = defaultDate ?? default(DateTime);
try
{
theDate = new DateTime(year, month, day);
}
catch
{
}
return theDate;
}
}
}
これが私のモデルです
using System;
using System.Collections.Generic;
using System.Web.Mvc;
using GetOrganized.Code;
namespace GetOrganized.Models
{
[ModelBinder(typeof (DateModelBinder))]
public class Todo
{
public bool Completed { get; set; }
public string Title { get; set; }
public Topic Topic { get; set; }
public string Outcome { get; set; }
public DateTime Date { get; set; }
public DateTime DefualtDate
{
get { return DateTime.Now; }
}
public TimeSpan DifferenceDate { get; set; }
}
}
しかし、私はエラーが発生します
パラメーター ディクショナリに、'GetOrganized.Controllers.TodoController' のメソッド 'System.Web.Mvc.ActionResult Create(GetOrganized.Models.Todo)' のパラメーター 'todo' の無効なエントリが含まれています。ディクショナリには 'System.DateTime' 型の値が含まれていますが、パラメーターには 'GetOrganized.Models.Todo' 型の値が必要です。パラメータ名: パラメータ 助けてください