asp.net 在从第一个传递的第二个剃刀页面上显示值

guykilcj  于 2023-10-21  发布在  .NET
关注(0)|答案(1)|浏览(94)

我有一个页面,收集用户的姓名首字母和输入日期。然后我把它传递到二级页面,在那里将进行一些输入工作,但我还没有能够得到首字母或输入日期显示在二级页面的HTML中。
我用这个将Initial和EntryDate从索引页传递到Add页。

public IActionResult OnPost()
{
    if (!ModelState.IsValid)
    {
        return Page();
    }

    return RedirectToPage("Add", "User", 
        new { User.EntryDate, User.Initials});
}

我可以通过在Add页面上设置一个断点来确认对象(Initals,EntryDate)是否进入了第二个页面。

public void OnGet(UserModel user)
{
    Initials = user.Initials;
    EntryDate = user.EntryDate;
}

最后,我可以将Initials和EntryDate从User对象转移到Item对象,以便在将数据提交到数据库时将Initials和EntryDate包含在OnPost中。

[ViewData]
[BindProperty]
public DateTime EntryDate { get; set; }

[ViewData]
[BindProperty]
public string Initials { get; set; }

public async Task<IActionResult> OnPost()
{
    if (!ModelState.IsValid)
    {
        return Page();
    }

    Initials = User.Initials;
    EntryDate = User.EntryDate;

    ItemModel item = new ItemModel();
    item.UserId = Initials;
    item.TransferDate = EntryDate;
    item.ItemNumber = Item.ItemNumber;
    item.FromLocation = Item.FromLocation;
    item.ToLocation = Item.ToLocation;
    item.Quantity = Item.Quantity;

    await item.InsertAsync();

    return RedirectToPage("/Index");
}

我正在努力的部分是,我想在加载时在添加页面的顶部显示姓名首字母和输入日期。

<div class="row">
    <div class="col-md-4">
       Initials: @Html.DisplayFor(User => User.User.Initials)
       <br />
       Entry Date: @Html.DisplayFor(User => User.User.EntryDate)
    </div>
</div>

当我点击OnPost时,我确实注意到@Html.DisplayFor上显示了姓名首字母和输入日期。我的问题是,我希望它们显示在OnGet上(在添加页面上的表单输入任何数据之前)。
我意识到我发布代码的方式可能会让人感到困惑,所以我打算发布整个页面。

public class AddModel : PageModel
{
    [ViewData]
    [BindProperty]
    public DateTime EntryDate { get; set; }
    [ViewData]
    [BindProperty]
    public string Initials { get; set; }
    [BindProperty]
    public ItemModel Item { get; set; }
    [BindProperty]
    public UserModel User { get; set; }

    public void OnGet(UserModel user)
    {
        Initials = user.Initials;
        EntryDate = user.EntryDate;
    }
    public async Task<IActionResult> OnPost()
    {
        if (!ModelState.IsValid)
        {
            return Page();
        }

        Initials = User.Initials;
        EntryDate = User.EntryDate;

        ItemModel item = new ItemModel();
        item.UserId = Initials;
        item.TransferDate = EntryDate;
        item.ItemNumber = Item.ItemNumber;
        item.FromLocation = Item.FromLocation;
        item.ToLocation = Item.ToLocation;
        item.Quantity = Item.Quantity;

        await item.InsertAsync();
        return Page();
        //return RedirectToPage("/Add");
        //return RedirectToPage("/Index");
    }
}
cnwbcb6i

cnwbcb6i1#

从你的描述,你似乎想直接到Add页面与一些值,然后加载添加页面与这些值最后提交从这些值,我创建一个演示重现您的问题,希望它可以给予你一些帮助。

[BindProperty]
        public UserModel User { get; set; }

        public IActionResult OnPost()
        {
            if (!ModelState.IsValid)
            {
                return Page();
            }

            return RedirectToPage("Add",
                new { User.EntryDate, User.Initials });
        }

Add.cshtml.cs

public class AddModel : PageModel
    {
       
        [BindProperty]
        [FromForm]
        public ItemModel Item { get; set; } = new ItemModel();

        public void OnGet(string Initials, DateTime EntryDate)
        {
            Item.Initials = Initials;
            Item.EntryDate = EntryDate;
        }

        public void OnPost()
        {
            // do some actions......
        }
    }

Add.cshtml

@page
@model RazorP.Pages.AddModel
@{
}

<form method="post">
    <div asp-validation-summary="ModelOnly" class="text-danger"></div>
    <div class="row">
        <div class="col-md-4">
            Initials: @Html.DisplayFor(x=>x.Item.Initials)
            <input type="hidden" asp-for="Item.Initials" />
            <br />
            Entry Date: @Html.DisplayFor(x=>x.Item.EntryDate)
            <input type="hidden" asp-for="Item.EntryDate" />
        </div>
    </div>

    <div class="form-group-with-label login-input-password mb-2">
        <label>Age</label>
        <input class="form-control-input" asp-for="Item.Age" autocomplete="off" />
        <span class="fa fa-eye"></span>
        <span asp-validation-for="Item.Age" class="text-danger"></span>
    </div>

    <div class="form-group-with-label login-input-password mb-2">
        <label>Address</label>
        <input  class="form-control-input" asp-for="Item.Address" autocomplete="off" />
        <span class="fa fa-eye" ></span>
        <span asp-validation-for="Item.Address" class="text-danger"></span>
    </div>
    <button>Submit</button>
</form>

相关问题