在MVC中编辑List集合中的属性的方法

时间:2015-08-20 07:47:56

标签: c# asp.net-mvc

    public class VerifyLicensorModel
    {
        public int TempId { get; set; } 
        public string Licensor { get; set; } 
        public string Address { get; set; }
        public int LicensorId { get; set; }
        public int ActionId { get; set; }   
        public int ReferenceId { get; set; }
    }

这是我的模型,我得到这个列表作为excel导入的结果,我要求用户验证数据

因此,对于每个许可方,用户应选择一个操作[actionId],并且还有一个基于操作用户选择[ReferenceId]的引用 因此,选择ActionId和ReferenceId,我使用模态弹出窗口,允许用户选择动作和referenceID [决定这两个参数的过程很复杂,包括很多条件检查和输入的并行选择,  示例首先确定liceonsor是新的还是现有的。如果现有的决定找到现有的id,相关的地址。然后决定使用新地址或替换现有地址。如果决定要替换现有的选择替换

这就是为什么计划将其逻辑作为一个单独的逻辑并且只返回结果,即2 Ids actionid和referenceID]

提交时如何设置这两个属性的值 我的观点我正在计划这样

        @model  IList<ApplicationLab.Models.VerifyLicensorModel>
        @using (Html.BeginForm())
        {
            @Html.ValidationSummary(true)

            <table class="table">
                <tr>
                    <th>
                      Licensor
                    </th>
                    <th>
                     Address
                    </th>
                    <th>
                        Action
                    </th>
                    <th>
                        Verify
                    </th>
                </tr>
              @for (int i = 0; i < Model.Count(); i++) 
              {
                    <tr>
                        <td>
                            @Html.HiddenFor(modelItem => Model[i].TempId)
                            @Html.HiddenFor(modelItem => Model[i].LicensorId)
                            @Html.DisplayFor(modelItem => Model[i].Licensor)                                
                        </td>
                        <td>
                            @Html.TextAreaFor(modelItem => Model[i].Address)
                        </td>
                        <td>                                  
                            @Html.HiddenFor(modelItem => Model[i].ActionId)
                            @Html.HiddenFor(modelItem => Model[i].ReferenceId)                             
                        </td>
                        <td>
                            <a >Verify</a> // onclick plannig to show popup
                        </td>
                    </tr>
                }
            </table>

            <div class="form-group">
                <div class="col-md-10" style="text-align:center;">
                    <input type="submit" value="Submit" class="btn btn-primary" />
                    @Html.ActionLink("Cancel", "LicenseImport", "Import", new { @id = @ViewBag.EditionId }, new { @class = "btn btn-link" })
                </div>
            </div>
        }

我的方法是正确的吗?如果是这样,我如何设置选定的行属性? 或者是建议实施相同的更好的方法或例子吗?

1 个答案:

答案 0 :(得分:0)

通常,您的视图模型应该是页面和页面上元素的表示。如果要在模态上使用它,则可以使用部分视图模板。

您需要创建List的新属性以表示可用于ActionIds和ReferenceIds的选项,并作为参数传递,以便在视图中使用辅助函数@ Html.DropDownListFor

public class VerifyLicensorModel
{
    public int TempId { get; set; } 
    public string Licensor { get; set; } 
    public string Address { get; set; }
    public int LicensorId { get; set; }
    public int ActionId { get; set; }
    public List<SelectListItem> ActionOptions { get; set; }   
    public int ReferenceId { get; set; }
    public List<SelectListItem> ReferenceOptions { get; set; }   
}

在视图上:

@Html.DropDownListFor(m => m.ActionId, Model.ActionOptions);
@Html.DropDownListFor(m => m.ReferenceId, Model.ReferenceOptions);