我想使用急切加载在Entity Framework Core中获得多个嵌套级别的子表.我不认为延迟加载已经实现.
我找到了EF6 的答案.
var company = context.Companies
.Include(co => co.Employees.Select(emp => emp.Employee_Car))
.Include(co => co.Employees.Select(emp => emp.Employee_Country))
.FirstOrDefault(co => co.companyID == companyID);
Run Code Online (Sandbox Code Playgroud)
我的问题是Select
在EF Core中无法识别
错误CS1061"Employees"不包含"Select"的定义,也没有扩展方法"Select"接受类型为"Employees"的第一个参数(您是否缺少using指令或程序集引用?)
我包含的命名空间:
using MyProject.Models;
using Microsoft.Data.Entity;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
Run Code Online (Sandbox Code Playgroud)
Select
在EF Core中有什么替代方案.
我正在使用ASP.NET 5.我需要将IHtmlContent转换为String
IIHtmlContent
是ASP.NET 5
Microsoft.AspNet.Html.Abstractions
命名空间的一部分,是一个TagBuilder
实现的接口
简化我有以下方法
public static IHtmlContent GetContent()
{
return new HtmlString("<tag>blah</tag>");
}
Run Code Online (Sandbox Code Playgroud)
当我参考它
string output = GetContent().ToString();
Run Code Online (Sandbox Code Playgroud)
我得到GetContent()的以下输出
"Microsoft.AspNet.Mvc.Rendering.TagBuilder"
Run Code Online (Sandbox Code Playgroud)
并不是
<tag>blah</tag>
Run Code Online (Sandbox Code Playgroud)
我想要的
我也尝试过使用StringBuilder
StringBuilder html = new StringBuilder();
html.Append(GetContent());
Run Code Online (Sandbox Code Playgroud)
但它也附加相同的命名空间而不是字符串值
我试着把它投射到TagBuilder
TagBuilder content = (TagBuilder)GetContent();
Run Code Online (Sandbox Code Playgroud)
但TagBuilder没有转换为字符串的方法
如何将IHtmlContent或TagBuilder转换为字符串?
我正在使用ASP.NET 5 RC1
_MyPartial
@model MyViewModel
<div class="panel panel-primary">
<div class="panel-body">
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
@Html.ValidationSummary(true)
@Html.MyHtmlHelperRow(model => model.ShortDistrictName)
@Html.MyHtmlHelperRowSaveButton(model => model.Id)
</div>
}
</div>
</div>
<div>
@Html.ActionLink("Back to List", "Index")
</div>
Run Code Online (Sandbox Code Playgroud)
cshtml
视图
@model MyViewModel
@{
ViewBag.Title = "Edit";
}
<h2>@ViewBag.Title</h2>
@Html.RenderPartialAsync("_MyPartial", Model)
@section Scripts {
@{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); }
}
Run Code Online (Sandbox Code Playgroud)
这条线
@Html.RenderPartialAsync("_MyPartial", Model)
Run Code Online (Sandbox Code Playgroud)
除了渲染html,呈现
System.Threading.Tasks.Task`1[System.Threading.Tasks.VoidTaskResult]
Run Code Online (Sandbox Code Playgroud)
html中的文本直接位于部分页面呈现的最后一个内容的下方.
如果我将部分行引用更改为非异步
@Html.Partial("_MyPartial", Model)
Run Code Online (Sandbox Code Playgroud)
然后我没有得到这个文本行.
问题:
为什么我在html中获得文本行
我如何摆脱它仍然能够使用RenderPartialAsync?
我正在使用ASP.NET 5 RC1.
什么是相当ASP.NET 5
MVC 6
的@Ajax.ActionLink
例:
@Ajax.ActionLink("Show",
"Show",
null,
new AjaxOptions { HttpMethod = "GET",
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "dialog_window_id",
OnComplete = "your_js_function();" })
Run Code Online (Sandbox Code Playgroud)
用于ASP.NET 4
MVC 5
.
我明白了:
当前上下文中不存在名称"Ajax".
在 ASP.NET 5
更新:
我明白它不会被实施.是否有人可以为我提供taghelper代码示例替代方案?
我一直在谷歌上看标签上的例子,但找不到我正在寻找的任何例子.
我有以下代码:
<div class="form-group">
<label asp-for="PersonName" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="PersonName" class="form-control" />
<span asp-validation-for="PersonName" class="text-danger"></span>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
我要做的是用类似的东西替换它
<bootstraprow asp-for="PersonName"></bootstraprow>
Run Code Online (Sandbox Code Playgroud)
但是,我不确定要编写包含其他标记的taghelper
编辑:这与在自定义标记中存储变量不同,但我想调用其他自定义标记或现有标记.
我正在使用ASP.NET Beta 8试图让脚手架工作,但它遇到了Microsoft.Framework.CodeGeneration的问题
我的 project.json
"commands": {
"web": "Microsoft.AspNet.Server.Kestrel",
"ef": "EntityFramework.Commands",
"gen": "Microsoft.Framework.CodeGeneration"
},
Run Code Online (Sandbox Code Playgroud)
命令:
dnx gen controller -Name ModelClassName--datacontext MyDbContext --model ModelClassName
Run Code Online (Sandbox Code Playgroud)
错误:
dnx : Error: Unable to load application or execute command 'Microsoft.Framework.CodeGeneration'. Available commands: web, ef, gen.
Run Code Online (Sandbox Code Playgroud)
此软件包在Nuget上,但尚未针对Beta 8进行更新.
只有版本是Beta 5. Link
当我安装这个Beta 5软件包时
安装包Microsoft.Framework.CodeGeneration -Pre
并运行相同的脚手架命令我得到错误:
无法解析"Microsoft.Framework.Runtime.ILibraryManager"类型的服务
这让我觉得脚手架在Beta 8中不起作用.
我正在尝试将枚举转换为List,如本例所示,例如
Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>().Select(v => new SelectListItem {
Text = v.ToString(),
Value = ((int)v).ToString()
}).ToList();
Run Code Online (Sandbox Code Playgroud)
这项工作,但我想修改它以使用通用枚举
public static List<SelectListItem> GetEnumList<TEnum>(TEnum value)
{
return Enum.GetValues(typeof(TEnum)).Cast<TEnum>().Select(v => new SelectListItem
{
Text = v.ToString(),
Value = ((int)v).ToString()
}).ToList();
}
Run Code Online (Sandbox Code Playgroud)
但是上面的代码没有编译和给出
无法将'TEnum'类型转换为'int'
为线
Value = ((int)v).ToString()
Run Code Online (Sandbox Code Playgroud)
我如何修复上面的代码.
为什么它使用泛型枚举而不是普通枚举给出编译错误
编辑:我已经尝试了线程中的建议,但我得到了进一步的错误:
这是我的完整代码:
public static IHtmlContent EnumDropDownListFor<TModel, TResult,TEnum>(
this IHtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TResult>> expression,
TEnum enumValue,
string optionLabel)
{
return htmlHelper.DropDownListFor(expression, (IEnumerable<SelectListItem>)GetEnumList(enumValue), optionLabel);
}
public static List<SelectListItem> GetEnumList<TEnum>(TEnum value)
{
return Enum.GetValues(typeof(TEnum)).Cast<TEnum>().Select(v => new SelectListItem
{
Text …
Run Code Online (Sandbox Code Playgroud)