[英]how to Build drop-down list from AspNetRoles table in register.cshtml and register.cshtml.cs?
[英]Unable to execute a SQL Server stored procedure from Register.cshtml.cs in Blazor app
我在 SQL Server 數據庫中有一個Players
表,我試圖在注冊期間使用存儲過程將它鏈接到AspNetUsers
表。 但是,當我嘗試調用該過程時,此變量 p 為空。 我是這種編碼的新手,所以在回復時請記住這一點。
這是 Register.cshtml.cs 文件中變量 p 為 null 的部分 -
readonly PlayerInitClass p;
public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
returnUrl = returnUrl ?? Url.Content("~/");
ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
if (ModelState.IsValid)
{
var user = new ApplicationIdentityUser { UserName = Input.Email, Email = Input.Email };
var result = await _userManager.CreateAsync(user, Input.Password);
int pID = await p.InitPlayerAsync(user);
}
}
這是我創建的課程 -
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Data.SqlClient;
using Microsoft.EntityFrameworkCore;
using Scorekeeper.Data;
namespace Scorekeeper.Areas.Identity
{
public class PlayerInitClass
{
private readonly ApplicationDbContext _db;
public PlayerInitClass(ApplicationDbContext db)
{
_db = db;
}
public async Task<Int32> InitPlayerAsync(ApplicationIdentityUser user)
{
int AspNetUserId = user.Id;
SqlParameter[] @params =
{
new SqlParameter("@returnVal", SqlDbType.Int) {Direction = ParameterDirection.Output},
new SqlParameter("@AspNetUserId", SqlDbType.Int) {Direction = ParameterDirection.Input, Value = AspNetUserId},
};
await _db.Database.ExecuteSqlRawAsync("EXEC @returnVal=[dbo].[InitializeNewRegistrationPlayer] @AspNetUserId", @params);
int result = Convert.ToInt32(@params[0].Value);
await Task.FromResult(result);
return result;
}
}
}
這是我看到的有關字段 p 為空的警告消息。
我最終找到了一種不為空的方法。 正如您可能已經知道的那樣,我是一個新手,正在盲目地跌跌撞撞地解決這個問題。 話雖這么說,但我不願意說這是問題的“正確”答案。 另外,即使我讓它不為空,它現在也會拋出一個不同的錯誤。 如果我無法弄清楚,我會發布一個單獨的問題。
這是我將 PlayerInitClass 更改為:
public class PlayerInitClass : Microsoft.EntityFrameworkCore.DbContext
{
public PlayerInitClass()
{
this.context = context;
}
public PlayerInitClass context { get; set; }
這就是我實例化它的方式(不確定這是否是正確的說法):
PlayerInitClass p = new PlayerInitClass();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.