Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在MVC视图中显示所有数据_C#_Asp.net Mvc_Asp.net Mvc Viewmodel_View Model Pattern - Fatal编程技术网

C# 在MVC视图中显示所有数据

C# 在MVC视图中显示所有数据,c#,asp.net-mvc,asp.net-mvc-viewmodel,view-model-pattern,C#,Asp.net Mvc,Asp.net Mvc Viewmodel,View Model Pattern,这是我从头开始的第一个MVC项目,我试图在视图首次加载时在视图中显示多个重复记录数据,然后允许用户在单击编辑按钮时编辑同一页面上的字段,并保存该特定记录的数据。我有一些数据显示,但我觉得我走错了方向 这是我的GeneRuleViewModel.cs public class GeneRuleViewModel { public virtual IEnumerable<GeneRule> GeneRules { get; set; } public v

这是我从头开始的第一个MVC项目,我试图在视图首次加载时在视图中显示多个重复记录数据,然后允许用户在单击编辑按钮时编辑同一页面上的字段,并保存该特定记录的数据。我有一些数据显示,但我觉得我走错了方向

这是我的GeneRuleViewModel.cs

    public class GeneRuleViewModel
    {

    public virtual IEnumerable<GeneRule> GeneRules { get; set; }
    public virtual IEnumerable<GeneGroup> GeneGroups { get; set; }
    public List<KeyValuePair<int, string>> RuleDataStarDesignation { get; set; }
    public List<KeyValuePair<int, IEnumerable<SelectListItem>>> RuleDataPhenotype { get; set; }
    public List<KeyValuePair<int, bool>> RuleDataClinicallySignificant { get; set; }

    [DisplayName("Star Designation:")]
    public string StarDesignation { get; set; }
    [DisplayName("Phenotype:")]
    public string SelectedPhenotype { get; set; }
    [DisplayName("ClinicallySignificant?")]
    public bool ClinicallySignificant { get; set; }
    }
公共类GeneRuleViewModel
{
公共虚拟IEnumerable泛型{get;set;}
公共虚拟IEnumerable基因组{get;set;}
公共列表规则数据集名称{get;set;}
公共列表RuleDataPeophy{get;set;}
公共列表规则DataClinicallysignificant{get;set;}
[显示名称(“星星名称:”)]
公共字符串StarDesignation{get;set;}
[显示名称(“表型:)]
公共字符串selectedepotype{get;set;}
[显示名称(“临床意义?”)]
公共布尔值具有临床意义{get;set;}
}
我使用了一个KeyValuePair,这样当在视图中循环项目时,我就可以知道哪个值属于特定的GeneRule_ID

这是我在GeneRuleController.cs中的Index()方法,在这里我从存储库填充KeyValuePairs

        public ActionResult Index()
    {
        var geneRules = generuleRepository.GetGeneRules();
        var geneGroups = generuleRepository.GetGeneGroups();

        List<KeyValuePair<int, string>> ruleStarDesignation = new List<KeyValuePair<int, string>>();
        List<KeyValuePair<int, IEnumerable<SelectListItem>>> rulePhenotype = new List<KeyValuePair<int, IEnumerable<SelectListItem>>>();
        List<KeyValuePair<int, bool>> ruleClinicallySignificant = new List<KeyValuePair<int, bool>>();


        foreach (var rule in geneRules)
        {
            rulePhenotype.Add(new KeyValuePair<int, IEnumerable<SelectListItem>>((int)rule.GeneRule_ID, generuleRepository.GetRulePhenotypes(rule)));
            ruleStarDesignation.Add(new KeyValuePair<int, string>((int)rule.GeneRule_ID, generuleRepository.GetRuleStarDesignation(rule)));
            ruleClinicallySignificant.Add(new KeyValuePair<int, bool>((int)rule.GeneRule_ID, generuleRepository.GetRuleClinicalSignificance(rule)));       
        }

        var generuleViewModel = new GeneRuleViewModel();
        generuleViewModel.GeneRules = geneRules;
        generuleViewModel.GeneGroups = geneGroups;
        generuleViewModel.RuleDataStarDesignation = ruleStarDesignation;
        generuleViewModel.RuleDataPhenotype = rulePhenotype;
        generuleViewModel.RuleDataClinicallySignificant = ruleClinicallySignificant;


        return View(generuleViewModel);
    }
public ActionResult Index()
{
var geneRules=generuleRepository.GetGeneRules();
var geneGroups=generilerepository.GetGeneGroups();
列表规则stardesignation=新列表();
列表规则表型=新列表();
列表规则Clinicallysignificant=新列表();
foreach(常规中的var规则)
{
添加(新的KeyValuePair((int)rule.generale_ID,generaleRepository.getRulePropeptions(rule));
添加(新的键值对((int)rule.generale_ID,generalerepository.GetRuleStarDesignation(rule));
添加(新的KeyValuePair((int)rule.generale_ID,generaleRepository.GetRuleClinicalSignificance(rule));
}
var generuleViewModel=新的generuleViewModel();
generuleViewModel.GeneRules=GeneRules;
generuleViewModel.GeneGroups=基因组;
generuleViewModel.RuleDataStarDesignation=ruleStarDesignation;
generuleViewModel.RuleDataPeophy=规则表型;
generuleViewModel.RuleDataClinicallySignificant=ruleClinicallySignificant;
返回视图(generuleViewModel);
}
这是我的Index.cshtml,我在其中循环遍历每个基因组和泛型以显示数据

    <div id="generulesgrid">
    <span class="glyphicon glyphicon-filter"></span>&nbsp;<span class="h4">Rule Filter</span>
    <div class="btn-group rulefilter">
        <button type="button" class="filter btn btn-default" data-filter="all">Show All</button>         
        @foreach (var geneGroup in Model.GeneGroups) {    
            <button type="button" class="filter btn btn-default" data-filter="@Html.DisplayFor(x => geneGroup.GeneGroup_NM)">@Html.DisplayFor(x => geneGroup.GeneGroup_NM)</button>
        }
    </div>


@foreach (var geneGroup in Model.GeneGroups) {    
    <div class="mix @Html.DisplayFor(x => geneGroup.GeneGroup_NM)">
        <div class="row">
            <div class="col-md-12">
                <div class="page-header">
                   <span class="glyphicon glyphicon-list"></span>&nbsp;<span class="h4">Gene Rules for <small>@Html.DisplayFor(x => geneGroup.GeneGroup_NM)</small></span>                
                </div>
            </div>
        </div>

        <div class="row">
            @foreach(var geneRule in Model.GeneRules.Where(x => x.GeneGroup_ID == geneGroup.GeneGroup_ID))
            {
                <div class="col-md-4">
                    @using (Html.BeginForm(null, "generule", FormMethod.Post, new { @class = "form-horizontal", @role = "form" }))
                    {
                        <div class="panel panel-default">
                            <div class="panel-heading">
                                @Html.DisplayFor(x=> geneRule.GeneRule_NM) <span class="glyphicon glyphicon-edit pull-right editRule" data-toggle="tooltip" title="Edit Rule"></span>
                            </div>
                            <div class="panel-body">
                                <div class="form-group">
                                    @Html.LabelFor(x => x.StarDesignation, new { @class = "col-md-4 control-label" })
                                    <div class="col-md-8">
                                        @Html.TextBoxFor(x => x.StarDesignation, new {@Value = Model.RuleDataStarDesignation.Where(x => x.Key == geneRule.GeneRule_ID).FirstOrDefault().Value, @class = "form-control", @placeholder = "Enter Star Designation"})
                                    </div>
                                </div>

                                <div class="form-group">
                                    @Html.LabelFor(x => x.SelectedPhenotype, new { @class = "col-md-4 control-label" })
                                    <div class="col-md-8">
                                        @Html.DropDownListFor(x=>x.SelectedPhenotype,Model.RuleDataPhenotype.Where(x => x.Key == geneRule.GeneRule_ID).FirstOrDefault().Value,"select phenotype",new {@id = "generule_" + geneRule.GeneRule_ID + "_phenotype", @class = "form-control" })
                                    </div>
                                </div>
                                <div class="form-group">                                    
                                    @Html.Label("Rule Definition","Rule Definition:",new { @class = "col-md-4 control-label" })
                                    <div class="col-md-8">
                                    </div>
                                </div>

                                <div class="form-group">
                                    <div class="checkbox">
                                        <label>                                        
                                            @Html.CheckBoxFor(x=> x.ClinicallySignificant, Model.RuleDataClinicallySignificant.Where(y => y.Key == geneRule.GeneRule_ID).FirstOrDefault().Value)

                                        </label>
                                    </div>
                                </div>

                            </div>
                        </div>
                   }
                </div>    
            } 
         </div>
     </div> 


}
</div>

规则过滤器
全部展示
@foreach(Model.GeneGroups中的var geneGroup){
@DisplayFor(x=>geneGroup.geneGroup\u NM)
}
@foreach(Model.GeneGroups中的var geneGroup){
@Html.DisplayFor(x=>geneGroup.geneGroup_NM)的基因规则
@foreach(Model.generales.Where(x=>x.GeneGroup_ID==GeneGroup.GeneGroup_ID))中的var generale)
{
@使用(Html.BeginForm(null,“generale”,FormMethod.Post,new{@class=“form horizontal”,@role=“form”}))
{
@DisplayFor(x=>generale.generale\u NM)
@LabelFor(x=>x.StarDesignation,新的{@class=“col-md-4控制标签”})
@Html.TextBoxFor(x=>x.StarDesignation,新{@Value=Model.RuleDataStarDesignation.Where(x=>x.Key==generale.generale\u ID).FirstOrDefault().Value,@class=“form control”,@placeholder=“Enter Star Designation”})
@LabelFor(x=>x.selectedepotype,新的{@class=“col-md-4控制标签”})
@Html.DropDownListFor(x=>x.selectedepotype,Model.ruledataepotype.Where(x=>x.Key==generale.generale\u ID).FirstOrDefault()值,“选择表型”,新的{@ID=“generale\u”+generale.generale\u ID+“\u-epotype”,@class=“form control”})
@Label(“规则定义”,“规则定义:”,新的{@class=“col-md-4控制标签”})
@(x=>x.ClinicallySignificant,Model.RuleDataClinicallySignificant.Where(y=>y.Key==generale.generale\u ID).FirstOrDefault().Value)
}
} 
}

正如我所说的,我觉得我这样做是错误的,因此任何帮助/建议都将不胜感激。

对我来说,这看起来不错,我的方法会有点不同;我会为模型中的每个子列表创建一个局部视图,这样每个局部视图都会获取一个简单的强类型列表

但是,您的方式也可以起作用。请记住(很多MVC新手都会犯这个错误),提交更改时,ViewModel不必与绑定的模型匹配

如果你想变得更圆滑,哟