数据库中表的每条记录的动态输入

时间:2015-08-18 15:17:03

标签: c# asp.net-mvc asp.net-mvc-4 dynamic mvc-editor-templates

我有一个名为UserFunctions的属性,我有几个函数,必须为每个函数分配一个User。我有一个EditorTemplate来返回用户列表。我必须为数据库中注册的每个函数动态创建一个字段,每个字段将使用EditorTemplate列出用户。 (如下图所示)。我创建了一个强类型的EditorTemplate(UserFunctions.cshtml)(模型ICollection),它生成字段,如下图所示,但我不知道该怎么做,以便将值返回给模型。我想过使用隐藏的多选,但是非常复杂。

enter image description here

我的班级

public class FunctionUser //Não mapeado
{
    public int IdFuncao { get; set; } //functin id
    public string Usuario { get; set; } //User
    public string DscFuncao { get; set; } //Function Description
}

视图中的我的字段(属性UserFunctions)

@Html.EditorFor(i => i.UserFunctions, "UserFunctions")

我的编辑模板 - > UserFunctions.cshtml

@model ICollection<FunctionUser>
@{
    var modelMetaData = this.ViewData.ModelMetadata;
    var propertyName = modelMetaData.PropertyName;    
}




@foreach (FunctionUser item in this.Model)
{
    var id = "id" + Guid.NewGuid().ToString().Substring(0, 5);    
    List<SelectListItem> listValues = new List<SelectListItem>();
    if (!string.IsNullOrEmpty(item.Usuario))
    {
        listValues.Add(new SelectListItem { Selected = true, Text = item.Usuario, Value = item.Usuario });
    }     
    <div id="@id" class="field-middle">
        <h3>@String.Format(ModeloResources.ProductDevelopment, item.DscFuncao) :</h3>
        @Html.DropDownList("", listValues, new { id = "PD" + item.IdFuncao.ToString() })
    </div>
    <script language="javascript" type="text/javascript">
        $("#@id select")
            .turnAutoComplete("@Url.Action("UsersListJson", "Security")");
    </script> 
}


<select name="@propertyName" multiple="multiple" size=30 style='height: 100%;' >
@foreach (FunctionUser item in this.Model)
{   
<option value="@item.IdFuncao">teste</option>
}
</select>

1 个答案:

答案 0 :(得分:0)

有人在&#34; pt.stackoverflow.com&#34;中回答了我的问题。解决方案是使用BeginCollectionItem包。

型号:

Match viewer

控制器:

/*

主要观点:

public partial class Modelo
{
    public ICollection<FuncaoUsuario> ProductDevelopment { get; set; }
    //Continua...
}
public class FuncaoUsuario 
{
    public int IdFuncao { get; set; }
    public string Usuario { get; set; }
    public string DscFuncao { get; set; }
}

部分视图:

public ViewResultBase Editar(int id)
{
    Modelo model = this.Service.GetForEdit(this.IdEmpresa, id);
    return base.SwitchView(model);
}

以下链接: Solution using BeginCollectionItem