2016-06-15 14 views
3

を与える:ASPNETコアRC2モデルバインディング私はASP.NET CORE RC2で働いていると私は、次のモデルバインダーを持ってヌルモデルに

public class MovieModelBinder : IModelBinder 
{ 
    public Task BindModelAsync(ModelBindingContext bindingContext) 
    { 
     if (bindingContext.ModelType == typeof(MovieViewModel)) 
     { 
      var idValue = bindingContext.ValueProvider.GetValue("Id").FirstValue; 
      var nameValue = bindingContext.ValueProvider.GetValue("Name").FirstValue; 

      var timespanProperty = bindingContext.ModelMetadata.Properties.Single(p => p.PropertyName == "Length"); 
      var timespanValue = bindingContext.ValueProvider.GetValue(timespanProperty.PropertyName).FirstValue; 

      int minutes; 
      int.TryParse(timespanValue, out minutes); 

      int id; 
      int.TryParse(idValue, out id); 

      var model = new MovieViewModel 
      { 
       Length = TimeSpan.FromMinutes(minutes), 
       Id = id, 
       Name = nameValue 
      }; 

      return Task.FromResult(ModelBindingResult.Success(bindingContext.ModelName, model)); 
     } 

     return Task.FromResult(default(ModelBindingResult)); 
    } 
} 

私はこのようなコントローラのアクションでそれを使用しています:

[HttpPost] 
public IActionResult Create([ModelBinder(BinderType = typeof(MovieModelBinder))] MovieViewModel model) 
{ 
    // Code here 
} 

問題は、毎回nullモデルを取得することです。 ModelBindingResult.Successメソッドには何が間違っていますか、正しい結果を返すためにはどのような変更を行う必要がありますか?

+0

bindingContext.Result = ModelBindingResult.Success(bindingContext.ModelName, model); 

を私はあまりexperiancedないのですが、私はあなたのリターンといくつかの問題があると思い、あなたのリターンが 'MovieViewModel'になりますshould'tタイプ? – KanisXXX

+0

その例を教えてもらえますか? – gdyrrahitis

+0

私は基本的なサンプルの 'ModelBinder'の例を実行しました。私はAnswersに投稿します。おそらくそれは役に立ちます – KanisXXX

答えて

1

rc2アップデート後に同じコードが動作しなくなったことが間違っています。この問題を回避するために

だけ手動で割り当てる:

return Task.FromResult(...) 
0

このあなたの質問にそうでないかもしれない答えが、一例として、私はここに

このModelBinder例を、それを掲示していますが、私は、コントローラ上でそれを使用しています私のUrlValidationタイプ

public class MBUser : IModelBinder 
    { 

     public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
     { 
      HttpContextBase httpContextBase = controllerContext.RequestContext.HttpContext; 
      UrlValidation urlValidation = new UrlValidation(); 
      //Binding posted values to UrlValidation type 
      urlValidation.Expirydate = DateTime.ParseExact(
       httpContextBase.Request["UrlValidation.Expirydate"].ToString(), 
       "d/M/yyyy", CultureInfo.InvariantCulture).ToString("G"); 
      urlValidation.ProjectTypeID = Convert.ToInt16(httpContextBase.Request["ProjectType"]); 
      urlValidation.Url = httpContextBase.Request["UrlValidation.Url"].ToString(); 
      string datetime = DateTime.Now.ToString("G"); 
      urlValidation.CreateDate = datetime; 
      // returning UrlValidation type 
      return urlValidation; 
     } 
    } 

に投稿された値をバインドこのような行動:

[HttpPost] 
     public ActionResult Enter([ModelBinder(typeof(MBUser))] UrlValidation rulValidation) 
     { 
      // my methods 
     } 

これは何とか役立ちます。

+0

私は参照してください、しかし、私はASP.NETのコアRC2、ASP.NET MVCの以前のバージョンではなく、答えを探しています。 – gdyrrahitis

+0

ohh .. !!私の例はここで無効です。 – KanisXXX

関連する問題