[英]AspNet Core RC2 Model binding gives null model
我正在使用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
}
問題是我每次都得到一個空模型。 ModelBindingResult.Success方法究竟是什么問題,應該做出哪些更改才能返回正確的結果?
我不確定什么是錯的,因為同樣的代碼在rc2更新后停止工作。
要解決方法,只需手動分配:
bindingContext.Result = ModelBindingResult.Success(bindingContext.ModelName, model);
之前
return Task.FromResult(...)
這可能不是你的問題的答案,但作為一個例子,我在這里發布它
此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
}
希望這會有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.