此代码在很多次之前有效,但在为Identity 2.1中的用户添加了几个新属性后,它已经停止工作.我收到UserId未找到错误,尽管在UserId的调试器中可以看到一个值.任何人都知道为什么突然发生这种情况?至少看到它是非常令人沮丧的.
这是代码:(控制器)
// POST: /Account/Register
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model)
{
model.BackgroundOnFile = false;
if (ModelState.IsValid)
{
var userDetails = new ApplicationUser { UserName = model.Email, Title = model.Title, Email = model.Email, FirstName = model.FirstName, LastName = model.LastName, LEAID = model.LEAID, SchoolID = model.SchoolID, Address1 = model.Address1, Address2 = model.Address2, City = model.City, State = model.State, PostCode = model.PostCode, BackgroundOnFile = model.BackgroundOnFile, BoardStart = model.BoardStart, BoardEnd = model.BoardEnd, PhoneNumber = model.PhoneNumber };
var result = await …Run Code Online (Sandbox Code Playgroud) 我花了好几个小时试图解决这个问题,到目前为止我可以找到基于MVC1,MVC2和MVC3的解决方案,但是没有关于MVC5和使用SSRS和ReportViewer的解决方案.坦率地说,我不了解WebForms,因为我加入了编程世界之后,MVC在我工作的商店中是一件大事.足够多的背景故事,我会接受它.
我有:
所以我已经达到了我认为我只需要aspx文件来完成我需要做的事情.如果有人能看到这个并帮助我,你会让我治愈许多小时的压力.
首先,我的RouteConfig.cs文件的片段:
routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
Run Code Online (Sandbox Code Playgroud)
我的报告控制器代码:
[HttpPost]
public ActionResult GetSysWideQuizReport([Bind(Include = "Topic, Date1, Date2")] QuizReporting quizParams)
{
ReportViewer ReportViewer1 = new ReportViewer();
ReportViewer1.ProcessingMode = ProcessingMode.Local;
ReportViewer1.LocalReport.ReportPath = Request.MapPath(Request.ApplicationPath) + @"Reports\System Quiz Report.rdl";
ReportDataSource source = new ReportDataSource("DataSet1", QuizData(quizParams));
ReportViewer1.LocalReport.DataSources.Clear();
ReportViewer1.LocalReport.DataSources.Add(source);
return View(ReportViewer1);
}
private DataTable QuizData(QuizReporting quizParams)
{
DataSet ds = new …Run Code Online (Sandbox Code Playgroud) 在努力学习代码之后,我注意到一些奇怪的事情:在结束我的调试会话并回到我的MVC控制器后,我得到一个实际的弹出警报,指示"对象引用未设置为对象的实例".我没有得到一个,我得到了它们的整个级联,VS基本上锁定了需要重新启动的点.这似乎不寻常,因为我没有调试任何东西,这个错误出现在Visual Studio 2013本身,而不是任何代码错误或错误面板.
我试图解决这个问题:
我正在处理的代码函数与测验有关 - 我已经创建了一周前测试的初始测验函数,但现在我正在进行"简历测验"功能.所以在控制器中非常相似和一些共享方法.
这对我来说非常困难,因为我的整个IDE对于这部分代码都没用.有没有人遇到VS本身说"对象引用未设置为对象的实例"?
我正在为系统管理员编写用户管理器,您可以在其中对用户对象执行各种功能.我目前的困境是我希望能够写出类似的东西
await UserManager.RemoveFromRoleAsync(userID, any);
Run Code Online (Sandbox Code Playgroud)
并将该人从以前的所有角色中删除.
现在我已经编写了这段代码,但它"感觉"很脏,可能会更好.在测试时,我也得到一个通用的"对象未设置为对象实例"错误.
控制器代码(用户ID和级别从调用页面传入):
var userID = "68790581-d2ae-4bc3-8db3-e4c8f4b0bb9f";
string level = "FullAdmin";
//POST: /Account/MakeAdmin
[HttpPost]
[Authorize(Roles = "SuperAdmin")]
public async Task<ActionResult> MakeAdmin(string userID, string level)
{
if(userID == null || level == null)
{
return View("Error");
}
if (level == "FullAdmin")
{
try
{
await UserManager.RemoveFromRoleAsync(userID, "Admin1");
}
catch { }
try
{
await UserManager.RemoveFromRoleAsync(userID, "ReadOnly");
}
catch { }
//Add to the desired role
try
{
await UserManager.AddToRoleAsync(userID, "SuperAdmin");
}
catch (Exception ex)
{
ViewBag.Exception = …Run Code Online (Sandbox Code Playgroud)