首页 > 解决方案 > C# DotNet Core Razor 页面,从 pageModel 为 createdModel 赋值

问题描述

我正在做一个项目,我需要创建一个表单来填充数据库。

我可以使用 Asp-for 处理程序来填写表格并且它正在工作。

但是我想在幕后添加一些信息,例如用户和创建日期。

我想做这样的事情:

public DateTime CurrentDate = DateTime.Now;
ModelForClients.CreationDate = CurrentDate; //That is what I would like to do. 
ModelForClients.UserType = currentUser // User which is filling the form I'm using login with Identity framework

你能告诉我我们如何从页面模型中添加信息吗?

模型页面 (cshtml.cs)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.Mvc.Rendering;
using ArchiProjectManager.Data;
using ArchiProjectManager.Models;
using Microsoft.AspNetCore.Identity;

namespace ArchiProjectManager.Pages.Users.Clients
{
    public class CreateModel : PageModel
    {
        private readonly ArchiProjectManager.Data.ApplicationDbContext _context;

        public CreateModel(ArchiProjectManager.Data.ApplicationDbContext context)
        {
            _context = context;
            
        }

        public IActionResult OnGet()
        {
            return Page();
        }

        [BindProperty]
        public ModelForClients ModelForClients {
            get; set;
        }

        //Variables added for the form

        public DateTime CurrentDate = DateTime.Now;
        ModelForClients.CreationDate = CurrentDate; //That is what I would like to do. 
        ModelForClients.UserType = currentUser // User which is filling the form I'm using login with Identity framework





        //Need to continue to add the user name and current date for the creation




        // To protect from overposting attacks, see https://aka.ms/RazorPagesCRUD
        public async Task<IActionResult> OnPostAsync()
        {
            if (!ModelState.IsValid)
            {
                return Page();
            }

            _context.ModelForClients.Add(ModelForClients);
            await _context.SaveChangesAsync();

            return RedirectToPage("./Clients");
        }
    }
}

前视图(剃须刀页面)

@page
@model CreateModel

@{
    ViewData["Title"] = "Create";
}

<div class="adminContainer">


    <div>
        <a asp-page="/Users/Clients/Clients" class="btn btn-danger">
            <i class="bi bi-backspace-fill"></i>
        </a>
    </div>
    <h1>Create</h1>

    <h4>ModelForClients</h4>
    <hr />
    <div class="row">
        <div class="col-md-4">
            <form method="post">
                <div asp-validation-summary="ModelOnly" class="text-danger"></div>
                <div class="form-group">
                    <label asp-for="ModelForClients.LastName" class="control-label"></label>
                    <input asp-for="ModelForClients.LastName" class="form-control" />
                    <span asp-validation-for="ModelForClients.LastName" class="text-danger"></span>
                </div>
                <div class="form-group">
                    <label asp-for="ModelForClients.FirstName" class="control-label"></label>
                    <input asp-for="ModelForClients.FirstName" class="form-control" />
                    <span asp-validation-for="ModelForClients.FirstName" class="text-danger"></span>
                </div>
                <div class="form-group">
                    <label asp-for="ModelForClients.Adress" class="control-label"></label>
                    <input asp-for="ModelForClients.Adress" class="form-control" />
                    <span asp-validation-for="ModelForClients.Adress" class="text-danger"></span>
                </div>
                <div class="form-group">
                    <label asp-for="ModelForClients.Company" class="control-label"></label>
                    <input asp-for="ModelForClients.Company" class="form-control" />
                    <span asp-validation-for="ModelForClients.Company" class="text-danger"></span>
                </div>
                <div class="form-group">
                    <label asp-for="ModelForClients.LegalRepresentative" class="control-label"></label>
                    <input asp-for="ModelForClients.LegalRepresentative" class="form-control" />
                    <span asp-validation-for="ModelForClients.LegalRepresentative" class="text-danger"></span>
                </div>
                <div class="form-group">
                    <label asp-for="ModelForClients.VatNumber" class="control-label"></label>
                    <input asp-for="ModelForClients.VatNumber" class="form-control" />
                    <span asp-validation-for="ModelForClients.VatNumber" class="text-danger"></span>
                </div>
                <div class="form-group">
                    <p>Utilisateur assigné: @User.Identity.Name</p>
                    <p>Date de création: @Model.CurrentDate </p>
                </div>

                <div class="form-group">
                    <input type="submit" value="Create" class="btn btn-primary" />
                </div>
            </form>
        </div>
    </div>

    <div>
        <a asp-page="Index">Back to List</a>
    </div>

</div>

该模型:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Threading.Tasks;

namespace ArchiProjectManager.Models
{
    public class ModelForClients
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int ClientId { get; set; }
        public string LastName { get; set; }
        public string FirstName { get; set; }
        public string Adress { get; set; }
        public string Company { get; set; }
        public string LegalRepresentative { get; set; }
        public string VatNumber { get; set; }
        public virtual User User { get; set; }
        public DateTime CreationDate { get; set; }
        public DateTime ModificationDate { get; set; }
        public string UserType { get; set; }
        

    }
}

标签: c#asp.netasp.net-corerazor

解决方案


您可以添加所需的信息作为hidden输入。

<input name="CreationDate" value="@model.CreationDate" type="hidden" />
<input name="UserType" value="@model.UserType" type="hidden" />

推荐阅读