作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在程序集中有一个类型,它没有被核心库引用,但被 Web 应用程序引用。例如
namespace MyApp.Models {
public class LatestPosts {
public int NumPosts { get; set; }
}
}
[HttpPost, ValidateAntiForgeryToken]
public ActionResult NewWidget(FormCollection collection) {
var activator = Activator.CreateInstance("AssemblyName", "MyApp.Models.LatestPosts");
var latestPosts = activator.Unwrap();
// Try and update the model
TryUpdateModel(latestPosts);
}
最佳答案
您的问题与类型在另一个程序集中或您使用 Activator.Create
动态创建它的事实无关。 .以下代码以非常简化的方式说明了该问题:
[HttpPost, ValidateAntiForgeryToken]
public ActionResult NewWidget(FormCollection collection)
{
// notice the type of the latestPosts variable -> object
object latestPosts = new MyApp.Models.LatestPosts();
TryUpdateModel(latestPosts);
// latestPosts.NumPosts = 0 at this stage no matter whether you had a parameter
// called NumPosts in your request with a different value or not
...
}
Controller.TryUpdateModel<TModel>
使用
typeof(TModel)
而不是
model.GetType()
确定模型类型,如
this connect issue 中所述(关闭的原因是:
by design
)。
TryUpdateModel
将按照您的预期运行的方法:
protected internal bool MyTryUpdateModel<TModel>(TModel model, string prefix, string[] includeProperties, string[] excludeProperties, IValueProvider valueProvider) where TModel : class
{
if (model == null)
{
throw new ArgumentNullException("model");
}
if (valueProvider == null)
{
throw new ArgumentNullException("valueProvider");
}
Predicate<string> propertyFilter = propertyName => new BindAttribute().IsPropertyAllowed(propertyName);
IModelBinder binder = Binders.GetBinder(typeof(TModel));
ModelBindingContext bindingContext = new ModelBindingContext()
{
// in the original method you have:
// ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(() => model, typeof(TModel)),
ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(() => model, model.GetType()),
ModelName = prefix,
ModelState = ModelState,
PropertyFilter = propertyFilter,
ValueProvider = valueProvider
};
binder.BindModel(ControllerContext, bindingContext);
return ModelState.IsValid;
}
[HttpPost, ValidateAntiForgeryToken]
public ActionResult NewWidget(FormCollection collection)
{
object latestPosts = new MyApp.Models.LatestPosts();
MyTryUpdateModel(latestPosts, null, null, null, ValueProvider);
// latestPosts.NumPosts will be correctly bound now
...
}
关于asp.net-mvc - 模型绑定(bind) - 输入外部装配体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9378690/
我正在为 .net 寻找一个简单的 3D 绘图 API。我需要绘制的形状是: 空心气缸 空心球体 空心立方体 3D线条 用于注释形状的 3D 文本 我正在寻找的功能是基本的平移、旋转和缩放功能。 任何
如其所说,我在网上读到有关将 Spine 导入 LibGDX 的信息。我正在使用 Android Studio 开发游戏并使用 LibGDX 框架。但是我的游戏需要 2D 装配动画而不是预渲染模型,所
我是一名优秀的程序员,十分优秀!