asp.net mvc4中的动态创建控件

本文关键字:动态 创建 控件 net mvc4 asp | 更新日期: 2023-09-27 18:22:02

我试图在asp.net mvc4中动态创建控件,但遇到了一些问题,也需要一些建议。下面的语句不起作用,它显示了"row.Options"下面的错误行@对于(行中的var o。选项)

除此之外,我可以动态创建dropdownlist或dropdownlistfor吗?如果可以,我如何根据当前场景分配名称和值?

查看

            @foreach(var row in Model.Controls) {
                var i = 0;
                <div>                        
                     <label>@row.Caption</label>
                     @if (row.ControlType == "text") {
                        <input type="text" name="@row.Name" />
                     } else if (row.ControlType == "select") {
                        <select name="@row.Name">
                            @for (var o in row.Options ) {
                                <option value="@o.Value>">@o.Text</option>
                            }
                        </select>                             
                     }                                          
                </div>  
                i++;
            }
            </ul>

查看模型

public List<SelectListItem> MembershipTypeList { get; set; }
public class Controls
{
    public string Caption {get; set;}
    public string ControlType {get; set;} 
    public string Name {get; set;}
    public List<SelectListItem> Options { get; set; }
}

控制器代码段

    public ActionResult Signup()
    {
        signup.MembershipTypeList.Add(new SelectListItem()
        {
            Text = "Student  £18.00",
            Value = "Student"
        });
        signup.MembershipTypeList.Add(new SelectListItem()
        {
            Text = "Associate  £18.00",
            Value = "Associate"
        });
        signup.Controls = new List<Controls>();
        signup.Controls.Add(new Controls() { Caption = "Age", ControlType = "text", Name = "txtage" });
        signup.Controls.Add(new Controls() { Caption = "Name", ControlType = "text", Name = "txtname" });
        signup.Controls.Add(new Controls() { Caption = "Membership", ControlType = "select", Name = "txtmembership", Options = signup.MembershipTypeList });
        return View("Signup", signup);
}

asp.net mvc4中的动态创建控件

我认为这可能只是一个额外的尖括号造成的,请尝试更改为:

<option value="@o.Value">@o.Text</option>

对于初学者来说,您的代码在这里无效:

<select name="@row.Name">
    @for (var o in row.Options ) {
        <option value="@o.Value>">@o.Text</option>
    }
</select> 

@o.Value> 中删除">"

按原样渲染会破坏html。

修复:

<select name="@row.Name">
    @foreach (var o in row.Options ) {
        <option value="@o.Value">@o.Text</option>
    }
</select>