【问题标题】:Web API parameter bind dynamically built table values to model?Web API参数将动态构建的表值绑定到模型?
【发布时间】:2016-10-20 18:43:48
【问题描述】:

假设您正在创建一个在线测试应用程序。它允许您添加多项选择测试题。因此,用户单击“添加新测试问题”并出现一个对话框。该对话框要求提供问题文本、可能答案列表和正确答案。所以结果是这样的:

    Which color has the letter "G" in it?
            A.  Blue
            B.  Red
    ---->   C.  Green
            D.  Yellow
            E.  Purple

每个新问题可能有不同数量的选项。那么下一个问题可能是:

    Does NYC have 5 boroughs?
    --->    A.  Yes
            B.  No

我创建了一个对话框,允许用户在表单中动态构建这些问题(添加答案、指定正确的答案等)。无论如何创建一个模型和一个 Web API 来在表单提交时无缝地参数绑定该结构?我在想一些疯狂的事情,比如我的表单中有一个表格,我可以以某种方式将它绑定到我的模型中的一个数组?可能不会那样工作,但正在寻找一个创意。

【问题讨论】:

    标签: c# asp.net-web-api model parameterbinding


    【解决方案1】:

    模型可能看起来像这样

    public class Question {
        public string Text { get; set;}
        public IList<Answer> Answers { get; set;}
    }
    
    public class Answer {
        public string Label { get; set;}
        public string Text { get; set;}
        public bool IsCorrect { get; set;}
    }
    

    一个 api 端点会收集这些来形成一个测试。

    public class Test {
        public IList<Question> Questions { get; set; }
    }
    
    public class TestController : ApiController {
        [HttpPost]
        public IHttpActionResult Create(Test test) { ... }
    }
    

    【讨论】:

    • 感谢您的回复。我认为我的问题更多是关于表单提交,而不是关于模型结构本身。我知道 Web API 有参数绑定。基本上,如果您的 Web 表单中的字段包含名称属性,并且名称属性值与您的服务器端模型字段名称匹配,那么 Web API 会自动为您将表单元素值映射到服务器端模型值。这对于静态表单字段非常有用。但是在这个例子中,答案元素是动态生成的并且数量是变化的。如何在提交时将动态创建的表单字段映射到模型?
    • 将集合作为数组或集合提交,ModelBinder 会转换它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 2014-12-23
    • 1970-01-01
    相关资源
    最近更新 更多