asp.net-mvc-3 – 如何建模绑定实现接口的类?
发布时间:2020-12-16 07:32:13 所属栏目:asp.Net 来源:网络整理
导读:模型绑定工作正常,直到我在以下类的顶部实现接口: public class QuestionAnswer : IQuestionAnswer { public Int32 Row_ID { get; set; } public Int32 Column_ID { get; set; } public String Value { get; set; } } public class HiddenAnswer : IHiddenA
模型绑定工作正常,直到我在以下类的顶部实现接口:
public class QuestionAnswer : IQuestionAnswer { public Int32 Row_ID { get; set; } public Int32 Column_ID { get; set; } public String Value { get; set; } } public class HiddenAnswer : IHiddenAnswer { public Int32 Hidden_Field_ID { get; set; } public String Hidden_Field_Value { get; set; } } public class SurveyAnswer : ISurveyAnswer { public string SessionID { get; set; } public List<IQuestionAnswer> QuestionAnswerList { get; set; } public List<IHiddenAnswer> HiddenAnswerList { get; set; } public SurveyAnswer() { QuestionAnswerList = new List<IQuestionAnswer>(); HiddenAnswerList = new List<IHiddenAnswer>(); } } 既然接口在那里,我得到500(内部服务器错误) 我用来建模绑定的javascript如下: $('#submitbutton').click(function () { var answers = new Array(); var hiddenfields = new Array(); var formname = "#" + $("#formname").val(); $(':input',formname).each(function () { if ($(this).is(":text") || $(this).is(":radio") || $(this).is(":checkbox")) { var answerObject = { Column_ID: $(this).attr('data-column_id'),Row_ID: $(this).attr('data-row_id'),Value: $(this).attr('data-theValue') }; answers.push(answerObject); } else if($(this).is(":hidden")) { var hiddenObject = { Hidden_Field_ID: $(this).attr('data-hidden_field_id'),Hidden_Field_Value: $(this).attr('data-hidden_field_value') } hiddenfields.push(hiddenObject); } }); $('textarea',formname).each(function () { var answerObject = { Column_ID: $(this).attr('data-column_id'),Value: $(this).val(),}; answers.push(answerObject); }); var allAnswers = { SessionID: 0,QuestionAnswerList: answers,HiddenAnswerList: hiddenfields } postForm(allAnswers); }); Controller Action如下所示: [AcceptVerbs(HttpVerbs.Post)] public ActionResult SubmitSurvey(SurveyAnswer answers) { // Dette tillader CORS Response.AppendHeader("Access-Control-Allow-Origin","*"); bc.SaveSurvey(answers); return null; } 我究竟做错了什么? 解决方法
您不能指望模型绑定器知道当它遇到SurveyAnswer视图模型上的IQuestionAnswer接口时,它应该使用QuestionAnswer类型.很高兴您已经声明了接口的这种实现,但模型绑定器对它没有任何线索. 因此,您必须为IQuestionAnswer接口编写自定义模型绑定器(对于IHiddenAnswer接口也是如此),并指出您希望使用哪个实现: public class QuestionAnswerModelBinder : DefaultModelBinder { protected override object CreateModel(ControllerContext controllerContext,ModelBindingContext bindingContext,Type modelType) { var type = typeof(QuestionAnswer); var model = Activator.CreateInstance(type); bindingContext.ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(() => model,type); return model; } } 这将在您的Application_Start中注册: ModelBinders.Binders.Add(typeof(IQuestionAnswer),new QuestionAnswerModelBinder()); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – 为什么实体框架在更新父项时会插入子项?
- asp.net – 在DataList ItemdataBound事件中,如何通过列名而
- abp demo运行1
- ASP.NET Core Web API从静态类登录
- asp.net-mvc – 使用具有Razor视图的Spark主布局
- API Test WebApiTestClient工具安装及使用
- asp.net-mvc – asp.net mvc路由:如何使用默认动作,但非默
- ASP.Net错误 – 类型与控件类型不兼容
- asp.net – 删除记住我从asp:login control复选框
- asp.net-mvc-3 – 模拟控制器动作单元测试的默认角色提供程
推荐文章
站长推荐
热点阅读