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>