MVC 4 -从视图传递数据=>控制器

本文关键字:数据 控制器 视图 MVC | 更新日期: 2023-09-27 18:15:49

实体"Bond"有一个名为"Kauf"的属性,它是另一个实体("Price" = date, adddedby, value)。

现在,在Create View of Bond (= Buy)中,需要输入Price的值。标准的Create View没有用于输入价格数据的字段。

如果我加上

    <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"从bond,我猜。谢谢你的意见!

MVC 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);
}
<<p> 视图/strong>
@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>    
}

如果通过"实体"你指的是一个实际的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
}
<<p> 视图/strong>
@model BondViewModel
@using(@Html.BeginForm())
{
    @Html.EditorFor(model => model.Kauf)
    <p><input type="submit" value="Save" /></p>
}

这里给出的答案都不适合我,我搜索了这么多在动作方法之间传递数据的简单事情。所以,这就是我的答案。

我有一个action POST方法,由JS在NavBar项目点击时调用。此方法实例化报表实例,并将其传递给另一个操作方法使用。但这里我返回的是字符串clickereport

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)