ASP.NET MVC Razor 页面局部变量到控制器

问题描述 投票:0回答:1

我正在学习 ASP.NET MVC,由于我的模型变得有点复杂,我遇到了一些不寻常的问题。

我有特定的模型,其中的项目可以处于不同的状态。该项目可以从一种状态转换到另一种状态。允许的转换在“转换”模型/表中定义。

为了获取特定状态的可用转换,我使用列出项目的索引页面,并向代码添加第二个

foreach
循环:

    @foreach (var transition in item.State.Transitions) {
        <form asp-action="@transition.TransitionName">
            <input type="hidden" asp-for="@item.Id" />
            <input type="submit" value="@transition.Description" class="btn btn-warning" />
        </form>}

为每个项目正确获取

@item.Id
的值。但是我注意到
@item.Id
是一个“局部变量”,源代码是
id="item_Id" name="item.Id" value="1"

相应地,没有

id
传输到控制器,我无法实现代码部分的其余部分,这将根据使用的转换设置新的状态值。

由于我不知道该怎么做,任何提示将不胜感激。

asp.net-mvc razor-pages
1个回答
0
投票

这是一个 POST 处理程序,可与 Razor 模板生成的表单配合使用:

public ActionResult OnPost(string action, Item item)
{
    //Seeing a request parameter called “item.Id” OR just “Id” (case
    //insensitive), the framework will create an Item instance and
    //fill the Id property accordingly.
    //
    //This is prone to overposting and you should probably not do it
    //or at least do additional validation. If your Item class has
    //a settable property called “Action” that will also be set!
    //Likely you don’t care about that, but it’s worth noting.
    //
    //The Item object will of course be incomplete and only have the
    //values provided by the request.
    //
    //If no fitting parameter is posted or it is not a valid integer
    //the framework will still call this handler and pass it a new
    //Item instance with all default values, i.e. Id will be 0.

    if (item.Id <= 0)
        return new BadRequestResult();

    return new ContentResult()
    {
        StatusCode = 200,
        ContentType = @"text/plain; charset=utf-8",
        Content = $"Congratulations, you have transitioned Item {item.Id} to {action}.",
    };
}

只要您的

Item
类具有

,此模型绑定就会自动工作
  1. 无参数构造函数和
  2. 可设置的
    Id
    属性。

否则你会得到一个例外。

© www.soinside.com 2019 - 2024. All rights reserved.