Mvc Html.Label或Html.TextBox无法创建

时间:2012-10-24 15:55:47

标签: asp.net-mvc html-helper

我正在为我正在进行的项目制作一个测试页面,到目前为止我已经取得了预期的进展,但我正在尝试从List模型创建TextBoxes,然后传递给视图似乎只是忽略了我尝试过的任何事情。

<form id="form1" runat="server">
    <input id="btnsubmit" type="submit" name="Submit" onclick="Submit" />
    <div id="divControls">
     <% foreach (TextBox control in (this.Model as List<TextBox>))
        {
            Html.Label("lblLabel", control.Text);
            Html.TextBox(control.ID, control.Text, new { id = control.ID, style = "width:50", name = "txt" + control.ID });
        } %>
    </div>
</form>

返回时,Controller中的List不为null。我不知道问题可能是什么。如果我在for循环中抛出

Something

,它会执行适当的次数,那么为什么不创建标签或文本框呢? 起初我以为是我在表单中添加它们但是我删除了表单标签但它仍然无效,所以我真的没有想法,任何帮助都会非常感激。我对MVC比较陌生。

[HttpPost]
        public ActionResult Index(FormCollection form)
        {
            List<TextBox> controls = new List<TextBox>();
            foreach (String Key in form.Keys)
            {
                if (Key.Contains("txt"))
                {
                    TextBox textBox = new TextBox();
                    textBox.ID = Key;
                    textBox.Text = form.GetValues(Key)[0];
                    controls.Add(textBox);
                }
            }
            return View("Index", controls);
        }

这是我的行动包装它的帮助。 还包括我不够清楚,我在运行时使用JQuery向表单添加控件,然后该Action将成为提交的一部分,因此它必须将文本框发送回视图,以便不删除它们。 就像我说的那样,我对整个MVC和Asynchronous都不熟悉所以如果有更好的方法可以做到这一点,建议将非常感激。

2 个答案:

答案 0 :(得分:1)

你不打印html

<% foreach (TextBox control in (this.Model as List<TextBox>))
        {%>
            <%=Html.Label("lblLabel", control.Text)%>
            <%=Html.TextBox(control.ID, control.Text, new { id = control.ID, style = "width:50", name = "txt" + control.ID })%>
<%        } %>

你的代码循环遍历控件,而Html.whaterever正在返回一个字符串,但你没有做任何事情,只是丢弃它。

您也不需要返回整个TextBox对象。这可能效率低下。只需返回包含您数据的structclass

答案 1 :(得分:0)

Html.Label返回包含<label>标记的字符串 你丢弃那个字符串。

您需要通过编写<%= Html.Whatever() %>将其写入页面。