将 post 从文本区域保存到 Razor 页面 Web 应用程序中的数据库

Saving post from textarea to database in Razor pages WebApplication

我正在尝试在 Visual Studio 中的 ASP.NET 核心 Web 应用程序上构建社交网络。 有成员资格和墙,成员可以在那里制作 posts。 我正在使用带有编辑工具的 textarea 的 Tinymce,我应该将 HTML 格式的 textarea 中的文本保存到我的本地 Visual Studio 数据库中,以及与正在 posting.

的已连接用户的 UserId

当我 运行 应用程序并尝试 post 时,这些似乎都不起作用。我在数据库中为 TextUserId.

获取了一个 null 条目

虽然 UserManager.cshtml 文件上正常工作并且 return 在 UserId 上工作,但我无法让它在 .cs 上工作文件

.cshtml 文件的相关代码:

    @using Microsoft.AspNetCore.Identity
    @inject UserManager<ApplicationUser> UserManager
    @model IndexModel
    @{
        ViewData["Title"] = "Home page";
    }
    <form asp-route-returnUrl="@Model.ReturnUrl" method="post" enctype="multipart/form-data" asp-controller="UploadFiles" asp-action="Index">
        <div class="form-group">
            <p>You are connected and can post as @UserManager.GetUserId(User)</p>
            <textarea name="txt" id="mytextarea" rows="2" cols="80" asp-for="Posts.Text" >
            </textarea>
        </div>
        <br />
        <div class="form-group">
            <input type="submit" value="Post" class="btn btn-default" />
        </div>
    </form>

.cs文件的相关代码:

    private readonly proj.Data.ApplicationDbContext _context;

    public IndexModel(proj.Data.ApplicationDbContext context)
    {
        _context = context;
    }    
    public Models.Posts Posts { get; set; }
    public async Task<IActionResult> OnPostAsync(string returnUrl = null)
    {
        UserManager<Data.ApplicationUser> UserManager;
        var post = new Models.Posts {UserId = UserManager.GetUserId(User), Text = Posts.Text };
        _context.Posts.Add(post);
        await _context.SaveChangesAsync();

        return Page();
    }

我收到 UserManager 的 "unassigned local variable" 错误。 你能帮我正确获取textarea的内容,并正确定义UserManager吗?

你好像用过Depend injection 所以你可以试试constructor injection

private readonly proj.Data.ApplicationDbContext _context;

private UserManager<Data.ApplicationUser> _userMannger;

public IndexModel(proj.Data.ApplicationDbContext context, 
   UserManager<Data.ApplicationUser> user)
{
   _userMannger= user;
    _context = context;
}   
public Models.Posts Posts { get; set; }
public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
    var post = new Models.Posts {UserId = _userMannger.GetUserId(User), Text = Posts.Text };
    _context.Posts.Add(post);
    await _context.SaveChangesAsync();

    return Page();
}

我解决了 textarea 问题。 该行应该是这样的:

<textarea asp-for="Posts.Text" id="mytextarea" rows="2" cols="80" class="form-control"></textarea>

我忘记包含 class="form-control" 并且 name="txt" 不知何故导致了问题,需要被省略。