繁体   English   中英

Razor 页面属性在处理程序调用时变空

[英]Razor page property gets empty on handler call

我正在使用 ASP.NET Core 并具有以下MyPage.cshtml

@page
@model MyServer.Pages.MyPageModel
@{
    ViewData["Title"] = "MyPage";
}

<h1>MyPage</h1>

@foreach (var sub in Model.Items)
{
    <div>
        <input type="checkbox" id="isSelected" checked="@sub.Value" />
        <label for="isSelected"><strong>@sub.Key</strong></label>
    </div>
}

<a asp-page-handler="Save">Save</a>

以及以下MyPage.cshtml.cs

using System;
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace MyServer.Pages
{
    public class MyPageModel : PageModel
    {
        public Dictionary<string, bool> Items = new Dictionary<string, bool>();
        public void OnGet()
        {
            Items.Add("Item 1", true);
            Items.Add("Item 2", false);
            Items.Add("Item 3", false);
            Items.Add("Item 4", false);
            Items.Add("Item 5", true);
        }

        public void OnGetSave()
        {
            Console.WriteLine("Save button clicked!!");
        }
    }
}

我的目标是在单击 Save 元素时触发Save()方法。 但目前它“清除”了页面上的其他数据:

如何创建一个按钮元素来触发Save()方法来保存我的数据状态?

我的目标是在单击 Save 元素时触发 Save() 方法。 但目前它“清除”了页面上的其他数据

正如@MikeBrind 所提到的,请将它们放在一个表单中并为您的输入指定name属性,如下所示。

<form method="post">
    @foreach (var sub in Model.Items)
    {
        <div>
            <input type="checkbox" id="isSelected" checked="@sub.Value" name="@sub.Key" />
            <label for="isSelected"><strong>@sub.Key</strong></label>
        </div>
    }

    <button asp-page-handler="Save">Save</button>
</form>

然后,您可以访问Request.Form集合中的选定项目,并使用RedirectToPage方法重定向到当前页面或指定页面,如下所示。

public IActionResult OnPostSave()
{
    var fb = Request.Form;

    var selected_items = string.Join(",", fb.Keys.ToList().Take(fb.Keys.Count - 1));

    //code logic to save selected items

    Console.WriteLine("Save button clicked!!");


    return RedirectToPage();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM