我正在使用SharePoint创建一个反馈调查表,使用的应用程序页面基本上是一个aspx页面。
我希望尽可能通过模拟MVC来做到这一点。我在代码隐藏中设置了我的模型:
public List<QuestionViewModel> modelQuestions = new List<QuestionViewModel>();
接下来,我需要根据问题类型显示每个问题和适当的输入(例如单行,多行,单选,多选)。
我已经正确地显示了问题:
<fieldset class="what-went-wrong">
<% for (int i = 0; i < modelQuestions.Count; i++) { %>
<p>
<label for="QuestionText">
<% if (modelQuestions[i].Required) { %>
<span class="req-field indicator">*</span>
<% } %>
<%= modelQuestions[i].QuestionText %>
<% if (modelQuestions[i].Required) { %>
<span class="req-field right">* Required field</span>
<% } %>
</label>
</p>
<% } %>
</fieldset>
这给了我问题文本。我现在正在尝试构建适当的输入,但是这个<% %>
标记不起作用:
<% if(modelQuestions[i].QuestionTypeId == QuestionType.SingleLine) { %>
<input id="modelQuestions_<% i %>" name="modelQuestions[<% i %>]" type="text" placeholder="<% modelQuestions[i].Placeholder %>" />
<% } %>
我似乎无法使用模型中的详细信息(在id,name,placeholder等的值中)来构造html元素。
另外,当我到达那一点时,我不知道如何将其发回服务器。
继续有什么好处吗?在这种情况下,是否有其他控件/方法更适合用于aspx?
答案 0 :(得分:0)
您无法生成此类HTML标记。即使data-binding expressions也无济于事,因为它们绑定了ASP.NET控件的属性值,而不是页面中的纯输出HTML。
您应该在"code behind"中生成标记,如下所示:
页面标记:
<div id='AnswersPanel'>
<div>
页面代码背后:
protected void PageLoad(...)
{
AnswersPanel.InnerHtml = "";
AnswersPanel.InnerHtml += string.Format("<input id='modelQuestions_{0}' name='modelQuestions[{0}]' type='text' placeholder='{1}' />",
i.ToString(),
modelQuestions[i].Placeholder);
}