Post 来自 Entity Framework Identity Scaffolded Razor 页面的提交点击表单值

Post Form Value on Submit Click from Entity Framework Identity Scaffolded Razor Page

在我的 .cshtml 文件中,我有一个适用于我的 MVC 页面的表单:

            <form action="@Url.Action("SaveUserEntryAsync", "ConfirmEmail")" method="post">
                <label class="modal-body1 col-form-label" id="confirmEmailPageComingSoonModalFormLabel">Modal Error!3</label>
                <br />
                <textarea class="form-control" name="newsfeedUserEntry" id="newsfeedUserEntry" type="text"></textarea>
                <div class="modal-footer">
                    <button type="submit" id="ComingSoonModalFooterSubmitButton" class="btn btn-success" data-dismiss="confirmEmailPageComingSoonModal">@_loc[Model.Submit]</button>
                </div>
            </form>

在我的脚手架 cshtml.cs 文件中,我有一个 public async Task<IActionResult> SaveUserEntryAsync(string newsfeedUserEntry) 方法。

<form action="@Url.Action("SaveUserEntryAsync", "ConfirmEmail")" method="post"> 不适用于 Razor 页面,我找不到正确的语法,因此我的按钮无法在页面上运行。任何帮助将不胜感激?

对于 Razor Pages,它使用 Razor 页面和页面处理程序。 @Url.Action() 以 MVC 控制器和操作为目标。您可以使用 @Url.Page(string pageName, string pageHandler)。假设您有 ConfirmEmail.cshtmlConfirmEmail.cshtml.cs:

<form  method="post" action="@Url.Page("ConfirmEmail", "SaveUserEntry")" >
    @Html.AntiForgeryToken()   
    <label class="modal-body1 col-form-label" id="confirmEmailPageComingSoonModalFormLabel">Modal Error!3</label>
    <br />
    <textarea class="form-control" name="newsfeedUserEntry" id="newsfeedUserEntry" type="text"></textarea>
    <div class="modal-footer">
        <button type="submit" id="ComingSoonModalFooterSubmitButton" class="btn btn-success" data-dismiss="confirmEmailPageComingSoonModal">aaa</button>
    </div>
</form>

或者您可以像下面这样使用 asp-pageasp-page-handler

<form asp-page="ConfirmEmail" asp-page-handler="SaveUserEntry" method="post">
    <label class="modal-body1 col-form-label" id="confirmEmailPageComingSoonModalFormLabel">Modal Error!3</label>
    <br />
    <textarea class="form-control" name="newsfeedUserEntry" id="newsfeedUserEntry" type="text"></textarea>
    <div class="modal-footer">
        <button type="submit" id="ComingSoonModalFooterSubmitButton" class="btn btn-success" data-dismiss="confirmEmailPageComingSoonModal">aaa</button>
    </div>
</form>

注意:请求中不需要添加Async后缀url.

对于处理程序,应该是OnPostXXX(XXX应该是处理程序名称):

public class ConfirmEmailModel : PageModel
{
    public void OnGet()
    {
    }
    
    public async Task<IActionResult> OnPostSaveUserEntryAsync(string newsfeedUserEntry)
    {
        return Page();
    }
}

参考:

https://docs.microsoft.com/en-us/aspnet/core/razor-pages/?view=aspnetcore-5.0&tabs=visual-studio#multiple-handlers-per-page

首先,更改 @Url.Action 而不是像@Rena 所说的那样必须使用 @Url.Page 或直接使用 asp-page。并更改您的代码:-

<button type="submit" id="ComingSoonModalFooterSubmitButton" class="btn btn-success" data-dismiss="confirmEmailPageComingSoonModal">aaa</button>

<input type="submit" id="ComingSoonModalFooterSubmitButton" data-dismiss="confirmEmailPageComingSoonModal" value=@_loc[Model.Submit] class="btn btn-success/>

希望它能解决您的问题。