我对AngularJS很新,我在这里不知所措.
现在我的MVC程序使用Razor显示我的.mdf数据库中的所有数据(即:@ Html.DisplayFor(modelItem => item.LastName)).但是,我想主要是Angular.我正在尝试使用ng-repeat来显示所有Model数据,但我不确定如何将该Model数据传递给Angular控制器然后使用它.我已经尝试在我的ng-init中将Model序列化为JSON,但我认为我做得不对(显然).
这是我的代码:
// controller-test.js
var myApp = angular.module('myModule', []);
myApp.controller('myController', function ($scope) {
$scope.init = function (firstname) {
$scope.firstname = firstname;
}
});Run Code Online (Sandbox Code Playgroud)
<!-- Index.cshtml -->
@model IEnumerable<Test.Models.Employee>
@{
ViewBag.Title = "Index";
}
<div ng-app="myModule">
<div ng-controller="myController" ng-init="init(@Newtonsoft.Json.JsonConvert.SerializeObject(Model))">
<table>
<tr ng-repeat= <!--THIS IS WHERE I'M STUCK -->
</table>
</div>
</div>
<script src="~/Scripts/angular.min.js"></script>
<script src="~/Scripts/controller-test.js"></script>
@Scripts.Render("~/Scripts/angular.js")Run Code Online (Sandbox Code Playgroud)
我不确定我应该重复从序列化模型中获取FirstName.我觉得我有所有的部分,但只是不确定如何连接它们.
我知道在控制器中,您可以[Authorize("policyName")]毫无问题地编写,但有没有办法在视图中使用策略?我不想User.IsInRole(...)每次都想要授权一些HTML.
编辑:
这是一些代码
Startup.cs - 政策声明
services.AddAuthorization(options =>
{
options.AddPolicy("testPolicy", policy =>
{
policy.RequireAuthenticatedUser()
.RequireRole("RoleOne", "RoleTwo", "RoleThree")
.RequireClaim(ClaimTypes.Email);
});
});
Run Code Online (Sandbox Code Playgroud)
管理控制器
[Authorize("testPolicy")]
public class AdminController : Controller
{
public IActionResult Index()
{
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
导航HTML
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li><a asp-controller="Home" asp-action="Index">Home</a></li>
<!-- I want to implement my policy here. -->
@if (User.IsInRole("..."))
{
<li><a asp-controller="Admin" asp-action="Index">Admin</a></li>
}
</ul>
@await Html.PartialAsync("_LoginPartial")
</div>
</div>
Run Code Online (Sandbox Code Playgroud) asp.net asp.net-mvc authorization asp.net-core-mvc asp.net-core
在默认_Layout.cshtml文件中,脚本在"环境"中定义如下:
<environment names="Development">
<script src="~/lib/jquery/dist/jquery.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
</environment>
<environment names="Staging,Production">
<script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-2.1.4.min.js"
asp-fallback-src="~/lib/jquery/dist/jquery.min.js"
asp-fallback-test="window.jQuery">
</script>
<script src="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.5/bootstrap.min.js"
asp-fallback-src="~/lib/bootstrap/dist/js/bootstrap.min.js"
asp-fallback-test="window.jQuery && window.jQuery.fn && window.jQuery.fn.modal">
</script>
<script src="~/js/site.min.js" asp-append-version="true"></script>
</environment>
Run Code Online (Sandbox Code Playgroud)
而在下面就是这样 @RenderSection("scripts", required: false)
我似乎无法在任何单独的.cshtml文件中实现一个部分(在本例中为"scripts"),因为它看起来像是@section在Core中摆脱了" "
我想为特定视图添加特定脚本.什么是新的方式去做?我_Layout现在暂时抛弃一切吗?
所以这是我的情况.
假设我有一个名为TheView.cshtml. TheView.cshtmlViewModel的视图TheViewModel.cs.在TheViewModel.cs,驻留一个TheObject被调用的对象()的列表TheObjectList.
我有一个TheObject被调用的编辑器模板TheObject.cshtml.使用此编辑器模板,我可以简单地显示TheObjectListwith 中的所有项目@Html.EditorFor(model => model.TheObjectList).
但是,现在我想动态地将对象添加到此列表中.我有一个AJAX函数,它调用一个简单的局部视图来给用户一个空白行来添加一个新的" TheObject",但是,TheObject我动态添加的任何新函数都不被认为是原始的一部分TheObjectList.
这是因为原始中的每个项目TheObjectList都是根据原始列表中的索引创建的,而每个新的动态TheObject都是在没有前缀的情况下创建的,因此Razor不会将其视为列表的一部分.
有没有解决的办法?
TheView.cshtml
@model Models.ViewModels.TheViewModel
<table id="Table">
<tbody>
@Html.EditorFor(m => m.TheObjectList);
</tbody>
</table>
<button id="AddObject" type="button" class="btn btn-primary">Add Object</button>
Run Code Online (Sandbox Code Playgroud)
TheViewModel.cs
public class TheViewModel
{
public List<TheObject> TheObjectList { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
AddObject控制器方法
public IActionResult AddObject()
{
return PartialView("_EmptyRow", new TheObject());
}
Run Code Online (Sandbox Code Playgroud)
添加对象的AJAX方法
$('#AddObject').click(function () { …Run Code Online (Sandbox Code Playgroud) 所以我在Startup.cs默认情况下有这个:
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
Run Code Online (Sandbox Code Playgroud)
如何查看loggerFactory正在添加的控制台?我可以在Debug输出窗口中看到日志信息,但它与其他自动调试信息非常混乱,很难找到.
有没有办法查看记录器控制台,或者如果没有,显示只有我登录输出的信息的方法?
所以我有四个单选按钮绑定到我的模型属性之一,所有属性都具有不同的值.但是,当表单提交时,该属性返回null(而其他所有内容都返回正确).码:
<div id="RadioButtonGroup">
<label asp-for="Object.PropertyOne" class="radio-inline">
<input asp-for="Object.PropertyOne" value="A" type="radio" name="optradio" >Option One
</label>
<label asp-for="Object.PropertyOne" class="radio-inline">
<input asp-for="Object.PropertyOne" value="B" type="radio" name="optradio" >Option Two
</label>
<label asp-for="Object.PropertyOne" class="radio-inline">
<input asp-for="Object.PropertyOne" value="C" type="radio" name="optradio" >Option Three
</label>
<label asp-for="Object.PropertyOne" class="radio-inline">
<input asp-for="Object.PropertyOne" value="D" type="radio" name="optradio" >Option Four
</label>
</div>
Run Code Online (Sandbox Code Playgroud)
我选择一个,提交表单,然后Object.PropertyOne返回null.但是,如果我Object.PropertyOne在ViewModel中手动设置,它会正确显示.我错过了什么?
所以我在尝试用@ Html.CheckBoxFor实现materializecss'复选框时遇到了问题.如果我完全输入:
<input type="checkbox" id="test5" />
<label for="test5">Red</label>
Run Code Online (Sandbox Code Playgroud)
有用.但如果我试试这个:
@Html.LabelFor(m => m.RememberMe, new { @class = "login-label" })
@Html.CheckBoxFor(m => m.RememberMe, new { @type = "checkbox" })
Run Code Online (Sandbox Code Playgroud)
复选框从页面左侧消失(复选框的样式左侧设置为-99999).
有没有其他方法可以实现CheckBoxFor,这将使materialise合作?
现在,(据我所知)搭建数据库的唯一方法是通过以下命令: Scaffold-DbContext .....
这不会构建没有主键或视图的表,并且如果您的代码中存在任何错误,则不会运行。另外,我相信为了更新一张表,你必须再次搭建整个数据库(如果我错了,请纠正我)
我们会在过去的 ASP.NET 版本中看到类似 .edmx 文件的内容吗?带有 GUI 的东西还是不太容易出错的东西?
有没有其他方法可以做到我错过了?
我有一个非常直截了当的问题.
在我的project.json文件中,我在"发布"部分的"appsettings.json"之后添加了"appsettings.Production.json".这非常有效,Production会按预期覆盖原始值.
但是,我的问题是:我是否可以在使用文本编辑器发布项目后修改Production json文件?我显然试过这样做但它不起作用,所以也许有些东西我不见了?或者,如果我想对任何json文件进行任何更改,是否还需要重新发布整个项目?
tl;博士
我应该在我的 ITicketStore 实现中做些什么来解决这个问题?我假设是这样,因为这是出现问题的地方,但是,我无法弄清楚。
一些片段:
Startup.cs --> ConfigureServices()
var keysFolder = $@"c:\temp\_WebAppKeys\{_env.EnvironmentName.ToLower()}";
var protectionProvider = DataProtectionProvider.Create(new DirectoryInfo(keysFolder));
var dataProtector = protectionProvider.CreateProtector(
"Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware",
"Cookies",
"v2");
--snip--
services.AddSingleton<ITicketStore, TicketStore>();
--snip--
services.AddDataProtection()
.PersistKeysToFileSystem(new DirectoryInfo(keysFolder))
.SetApplicationName("app_auth");
services.ConfigureApplicationCookie(options =>
{
options.Cookie.Name = ".XAUTH";
options.Cookie.Domain = ".domain.com";
options.ExpireTimeSpan = TimeSpan.FromDays(7);
options.LoginPath = "/Account/Login";
options.DataProtectionProvider = protectionProvider;
options.TicketDataFormat = new TicketDataFormat(dataProtector);
options.CookieManager = new ChunkingCookieManager();
options.SessionStore = services.BuildServiceProvider().GetService<ITicketStore>();
}); …Run Code Online (Sandbox Code Playgroud) 我在网上找不到任何模仿谷歌登录MVC 5及以下用于MVC 6的实现.是否支持?我正在使用OWIN,但它似乎现在已经过时了.任何人都可以如此善良,以我的方式扔一些链接或信息?我完全失去了.
asp.net-core ×8
asp.net ×7
asp.net-mvc ×7
razor ×5
c# ×4
angularjs ×1
cookies ×1
html5 ×1
javascript ×1
logging ×1
material ×1
materialize ×1
oauth ×1
oauth-2.0 ×1
viewmodel ×1