Asp.net core mvc 在MVC6中通过表单将预定义对象从视图传递到控制器

Asp.net core mvc 在MVC6中通过表单将预定义对象从视图传递到控制器,asp.net-core-mvc,Asp.net Core Mvc,我的控制器中的代码: [HttpPost] [ValidateAntiForgeryToken] public IActionResult CreateRedBlood(Donor donor) { if (ModelState.IsValid) { //create Blood newBlood = new Blood(); if(donor != null)

我的控制器中的代码:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public IActionResult CreateRedBlood(Donor donor)
    {
        if (ModelState.IsValid)
        {
            //create
            Blood newBlood = new Blood();
            if(donor != null)
            {
                DateTime todaysdate = DateTime.Now;
                newBlood = new Blood("RBC", donor.ID);
            }
            _context.Blood.Add(newBlood);
            _context.SaveChanges();
在我看来:

    <form asp-action="CreateRedBlood" method="post">
    <div class="form-horizontal">
        <h4>Make Donation</h4>
        <hr />
        <div class="form-group">
            <input type="submit" value="Make Red Blood Cell Donation"class="btn btn-default" />
        </div>
    </div>
</form>

捐款

在使用此表单之前,该页面已从控制器获取完整的DON或详细信息,并使用model.sensor.x获取所有有用的信息位

我想做的是将model.provider传递回这个表单,这样当按下按钮时,它会获取所有方便的信息,并将其直接返回到CreateRedBlood中

有什么想法吗? 谢谢

编辑:Shyju要求提供以下内容。这是我正在与之合作的索引控制器,以获取完整的详细信息

        public IActionResult Index(string searchString)
    {
        FullDonorDetails fullDonorDetails = new FullDonorDetails();

        //Get Donor
        Donor emptyDonor = new Donor();
        Donor activeDonor = new Donor();
        if (!string.IsNullOrEmpty(searchString)
                && searchString.Length == 10)
        {
            activeDonor = _context.Donor.Single(m => m.NHN == searchString);

            if (activeDonor != null)
            {
                fullDonorDetails.Donor = activeDonor;
            }
            else
            {
                fullDonorDetails.Donor = emptyDonor;
            }
        }

        else
        {
            fullDonorDetails.Donor = emptyDonor;
        }
        //Get History
        List<Blood> donorBloodHistory = new List<Blood>();
        if (activeDonor != emptyDonor)
        {
            //RedBlood
            var BloodHistory = from r in _context.Blood
                                  select r;
            BloodHistory = BloodHistory.Where(s => s.DonorId.Equals(activeDonor.ID));
            foreach (Blood currentBlood in BloodHistory)
            {
                donorBloodHistory.Add(currentBlood);
            }

            List<Blood> sortedList = donorBloodHistory.OrderBy(o => o.DateTaken).ToList();
            sortedList.Reverse();
            fullDonorDetails.DonorHistory = sortedList;
        }

        return View(fullDonorDetails);
    }
公共IActionResult索引(字符串搜索字符串) { FullDonorDetails FullDonorDetails=新的FullDonorDetails(); //获得捐赠者 供体emptyDonor=新供体(); 供体活动供体=新供体(); 如果(!string.IsNullOrEmpty(searchString) &&searchString.Length==10) { activeprovider=\u context.provider.Single(m=>m.NHN==searchString); 如果(Active捐赠者!=null) { fullDonorDetails.provider=activeprovider; } 其他的 { 供体=空供体; } } 其他的 { 供体=空供体; } //了解历史 List donorBloodHistory=新列表(); if(activeDonor!=emptyDonor) { //红血球 var BloodHistory=来自r\u context.Blood 选择r; BloodHistory=BloodHistory.Where(s=>s.DonorId.Equals(activeconsor.ID)); foreach(血液流动血液历史中的血液) { donorBloodHistory.Add(当前血液); } List-sortedList=donorBloodHistory.OrderBy(o=>o.datetake.ToList(); sortedList.Reverse(); fullDonorDetails.DonorHistory=sortedList; } 返回视图(完整或详细); }
由于您的HttpPost操作方法仅读取施主类的
ID
属性,该属性是HttpPost操作方法的参数,因此您应该将该属性值保留在具有相同名称(
ID
)的表单字段中

@型号完整或详细信息
捐款


现在,当用户提交表单时,HttpPost操作方法的参数将具有施主ID的值(在GET操作中设置)。

因为HttpPost操作方法仅读取施主类的
ID
属性,该属性是HttpPost操作方法的一个参数,您应该将该属性值保留在具有相同名称(
ID
)的表单字段中

@型号完整或详细信息
捐款


现在,当用户提交表单时,HttpPost操作方法的参数将具有捐赠者ID的值(您在GET action中设置的)。

您的GET action看起来如何?向OP添加了新信息。您的GET action看起来如何?向OP添加了新信息。谢谢Shyju。最后我用了:所以你的答案非常准确。很好!如果使用
asp for
属性,则无需显式设置该值。请看我的编辑。谢谢Shyju。最后我用了:所以你的答案非常准确。很好!如果使用
asp for
属性,则无需显式设置该值。请参阅我的编辑。
@model FullDonorDetails 

<form asp-action="CreateRedBlood">
 <div class="form-horizontal">
     <h4>Make Donation</h4>
     <hr />

     <input type="hidden" asp-for="Donor.ID"  name="ID" />

     <div class="form-group">
        <input type="submit" value="Make RBC Donation"class="btn btn-default" />
     </div>
  </div>
</form>