如何从视图中获取某个实体ID?

时间:2019-06-09 21:01:23

标签: c# asp.net asp.net-mvc entity-framework

我可以仅通过一个按钮运行这些get和post操作吗?我从视图中得到一个ID,然后我想执行我的后操作。

我已经尝试使用参数获取ID并将其放入会话中,但无法通过一个提交按钮来实现

    [HttpGet]
    public ActionResult JoinEvent(int id)
    {
        Session["EventID"] = id;
        return View();
    }
    [HttpPost]
    public ActionResult JoinEvent(EventPerson eventPerson)
    {
        Person per =(Person) Session["Login"];
        eventPerson.PersonID = per.PersonID;
        eventPerson.EventID = (int)Session["EventID"];
        eventPerson.TotalPerson = eventPerson.TotalPerson + 1;
        eventManager.Join(eventPerson);
        return View();
    }

这是我的观点

<td class="buy_link">
                            @Html.ActionLink("Join","JoinEvent","Join",item.EventID,null)                          
                        </td>

2 个答案:

答案 0 :(得分:0)

从技术上讲,您不能。使用操作链接创建锚标记时,它会创建指向指定URL的链接。当您单击该链接时会触发GET请求。那不会将数据发布到action方法。如果需要POST数据,则需要提交表单,也可以使用Javascript / jQuery来完成。您可以使用Js / jQuery收集数据并将其作为POST发送。但是只是锚点不会发送POST方法。

引用this

答案 1 :(得分:0)

就像您在此处发布的内容一样,客户端可以通过导航至 GET {{1}来自由自由设置(没有任何安全限制) }。

如果安全性不是问题,则可以通过多种方式实现

将事件ID传递给客户端,这又会将其返回给服务器。 如何?这是一种方法

  1. 将其作为EventPerson模型的一部分传递,您将需要在该模型内部添加一个新属性。 ActionResult应该:/JoinEvent?id=100
  2. 用以下return View(new EventPerson { EventId: id })装饰视图的第一行(在导入语句之后),这将告诉视图现在他代表这种类型。 (哪个是通过GET操作传递的)
  3. 现在,我们应该决定是否要将其作为查询字符串参数或主体参数传递回服务器?因为我们正在执行语义“插入”操作,所以在大多数情况下,实践要求我们将其作为身体的一部分传递。因此,您应该使用隐藏的文本框来传递EventId参数。

    @model EventPerson

“ EventId” 是我们要在POST服务器操作@Html.Hidden("EventId", @model.EventId))新属性上绑定的属性。 (第1点)

@ model.EventId 是我们从服务器获取的值,并将其传递到了View(Point#2)