我在一个视图中返回多个模型时遇到问题。我有一个模型,其中包含其他模型的集合。因此,当我返回具有其他2的集合的模型(ProblemsVM)时,我想将其他2附加到要返回的模型,以便我可以在视图中访问它的值。非常感谢任何帮助,感谢您花时间阅读。
这是我的ProblemsVM模型和我希望包含在视图中的2个IEnumebles。返回。
public class ProblemsVM
{
public int Id { get; set; }
public string Title { get; set; }
public int ProjectId { get; set; }
public IEnumerable<Category> Categories { get; set; }
public IEnumerable<Type> Types {get; set;}
}
这是返回我要将2个模型附加到的视图的操作。现在,它通过ProjectId从API接收一个包含不同问题的表。
public ActionResult ReturnProblems()
{
List<ProblemsVM> dv = new List<ProblemsVM>();
// return problems
var requestDef = new RestRequest("problem", Method.GET);
requestDef.AddHeader("id", userId);
requestDef.AddHeader("key", userKey);
requestDef.RequestFormat = DataFormat.Json;
var responseDef = Userclient.Execute(requestDef) as RestResponse;
List<ProblemsVM> problems = JsonConvert.DeserializeObject<List<ProblemsVM>>(responseDef.Content);
IEnumerable<ProblemsVM> problemsToReturn = problems.Where(d => d.ProjectId == item.ProjectId);
return View(problemsToReturn);
}
所以我想要做的就是我在另一个应用程序中所做的事情。在这个中,当使用不在列表中的模型或IEnumerable
时,它可以正常工作。我无法将此切换到上面的方法以返回问题列表。 ProbVM与其他项目中的ProblemsVM相同。
ProbVM tt = new ProbVM();
tt.Cats = db.Categories.ToList();
tt.Typ = db.Types.ToList();
return View(tt);
这是我存储在SQL数据库中的另外两个模型:
public partial class Type
{
public int Id { get; set; }
public int Order { get; set; }
public string Description { get; set; }
public int CategoryId { get; set; }
public virtual Category Category { get; set; }
}
public partial class Category
{
public Category()
{
this.Types = new HashSet<Type>();
this.Companys = new HashSet<Company>();
}
public int Id { get; set; }
public string Title { get; set; }
public int CompanyId { get; set; }
public virtual ICollection<Company> Companys { get; set; }
public virtual ICollection<Type> Types { get; set; }
}
-----更新部分------
因此,当单击此按钮(位于数据表的行中)时,它会弹出一个模态:
<a href="@Url.Action("Type", "Problem", new { id = item.Id })" class="btn btn-primary btn-sm" role="button" id="launch">Type</a>
并在按钮id上“启动”在ajax中调用:
<script>
$(function () {
$("#type-modal").dialog({
autoOpen: false,
height: 600,
width: 500,
modal: true,
open: function () {
$("#accordion").accordion({ autoHeight: true });
}
});
$(".launch").click(function () {
Id.value = $(this).attr('value');
$("#type-modal").dialog("open");
})
});
</script>
并且在type-modal div中我将使用Category和Type模型来使用razor(想像我在其他项目中那样使用类似的东西):
foreach (var item in Model.Cats)
{
@Html.Label(item.Title, new { cats = item.Title })<br/>
foreach(var tri in Model.types)
{
if (item.CategoryId == tri.CategoryId)
{
@Html.RadioButton(tri.Category.Title, tri.Order)
@Html.Label(tri.Description)<br/>
}
}
}