实体“Bond”有一个名为“Kauf”的属性,它是另一个实体(“Price”= date,addedBy,value)。
现在,在创建债券的视图(=买入)时,需要输入价格的价值。标准的创建视图没有用于输入价格数据的字段。
如果我添加
<div class="editor-field">
@Html.EditorFor(model => model.Kauf.Value)
@Html.ValidationMessageFor(model => model.Kauf.Value)
</div>
到视图,然后我如何能够在控制器中掌握该值,其中通常只接受实体“Bond”作为参数?
[HttpPost]
public ActionResult Create(Bond position)
尝试通过
访问它 position.Kauf.Value
我想,只会从债券中引用(尚)空属性“Kauf”。感谢您的投入!
答案 0 :(得分:4)
发帖作为答案,因为评论时间过长。我试图重新创建并且它都在这里工作,所以我想我会发布我所拥有的内容,以便你可以与你正在做的事情进行比较:
我假设Kauf.Value
是一个字符串......
<强>控制器强>
[HttpGet]
public ActionResult Create()
{
// Setup model before passing in
var model = new Bond();
return View(model);
}
[HttpPost]
public ActionResult Create(Bond position)
{
string theValue = position.Kauf.Value;
// At this point "theValue" contains a valid item
return View(position);
}
查看强>
@model MvcExperiments.Models.Bond
@using(@Html.BeginForm())
{
<div class="editor-field">
@Html.EditorFor(model => model.Kauf.Value)
@Html.ValidationMessageFor(model => model.Kauf.Value)
</div>
<p>
<input type="submit" value="Save" />
</p>
}
答案 1 :(得分:4)
如果您通过“实体”指的是实际的ORM实体,则可能是问题所在 - 您应该使用视图模型将数据传入/传出视图,而不是原始实体。例如,您可以尝试以下操作:
<强>模型强>
public class KaufViewModel
{
public double Price { get; set; }
public string Value { get; set; }
...
}
public class BondViewModel
{
public KaufViewModel Kauf { get; set; }
}
<强>控制器强>
[HttpGet]
public ActionResult Create()
{
return View(new BondViewModel());
}
[HttpPost]
public ActionResult Create(BondViewModel bond)
{
// bond.Kauf.Value should be set at this point (given it's set in the form)
return View(bond); // fields should be re-populated
}
查看强>
@model BondViewModel
@using(@Html.BeginForm())
{
@Html.EditorFor(model => model.Kauf)
<p><input type="submit" value="Save" /></p>
}
答案 2 :(得分:1)
这里给出的答案都没有为我工作,我搜索了很多在动作方法之间传递数据的简单方法。所以,这是我的答案。
我有一个动作POST方法,由JS在NavBar项目点击时调用。此方法实例化报表实例,并将其传递给另一个操作方法使用。但是我在这里返回一个字符串clickedReport。
ViewBag对我不起作用,因为模型不起作用而返回实例,并且它的唯一工作方式是使用TempData或Session,如下所示。
[HttpPost]
public ActionResult PopulateReport(int groupId, int itemId)
{
string clickedReport;
...
TempData["clickedReport"] = clickedReport;
Session["clickedReport"] = clickedReport;
return PartialView();
}
public ActionResult GridViewPartial()
{
// Now this other action method can get the clicked report assigned by the above action.
var tmpData = TempData["clickedReport"];
var sessionData = Session["clickedReport"];
// Runs the report instance and returns an object that holds a DataTable and other info to the grid that's in the calling partial view.
// Instantiate and populate GridConfig
GridConfig gridConfig = new GridConfig();
...
return PartialView("_GridViewPartial", gridConfig);
}
----这是PopulateReport操作的视图,即PopulateReport.cshtml @ Html.Action( “GridViewPartial”)
希望这有助于某人。