在SharePoint应用程序页面上使用模型.aspx

时间:2016-06-14 14:59:57

标签: c# asp.net asp.net-mvc sharepoint

我正在使用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?

1 个答案:

答案 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);
}