1

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

现在,在创建债券视图 (= Buy) 时,需要输入价格值。标准的创建视图没有用于输入价格数据的字段。

如果我添加

    <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”。感谢您的输入!

4

3 回答 3

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>
}
于 2013-05-29T15:43:26.663 回答
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>    
}
于 2013-05-29T15:41:49.203 回答
1

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

我有一个由 JS 在 NavBar 项目单击时调用的操作 POST 方法。此方法实例化一个报表实例,并将其传递给另一个操作方法使用。但在这里我返回一个字符串 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")


希望这可以帮助某人。

于 2013-12-18T18:03:31.727 回答