在MVC6中通过表单将预定义的对象从View传递到Controller

时间:2016-01-17 14:53:50

标签: asp.net-core-mvc

我的控制器中的代码:

    [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>

在使用此表单之前,页面已从控制器获取FullDonorDetails,并使用model.donor.x获取所有有用的信息。

我想要做的是将model.donor传递回此表单,这样当按下按钮时,它会获取所有方便的信息并将其直接放回CreateRedBlood。

有什么想法吗? 谢谢!

编辑:Shyju要求以下内容。这是我正在使用的索引控制器来获取fullDonorDetails。

        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);
    }

1 个答案:

答案 0 :(得分:2)

由于您的HttpPost操作方法只读取Donor类的ID属性(这是HttpPost操作方法的参数),因此您应该将该属性值保留在具有相同名称的表单字段中({{ 1}})。

ID

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