gpt4 book ai didi

c# - 传递给后 Controller 的参数始终为空

转载 作者:行者123 更新时间:2023-11-30 22:02:15 25 4
gpt4 key购买 nike

这个问题与我的上一个问题非常相似,但这与传递多个参数有关。我的 Controller 有两个同名的方法,但其中一个被传递了一个可为 null 的 int 以确定在 post 上执行哪个操作(我不知道这是否是一个好的设计决策)。这是代码:

public ActionResult EventDetails(int? eventID)
{
EventDetailsViewModel model = new EventDetailsViewModel();

if (eventID != null)
{
model.afterPost = false;
model.currentAttendance = getCountAttending(eventID);
model.currentUser = getCurrentUserProfile(User.Identity.Name);
model.eventDetails = getEventDetails(eventID);
model.eventRestrictions = getEventRestrictions(eventID);
model.usersAttending = getUsersAttending(eventID);
return View(model);
}
else
{
return View();
}
}

[HttpPost]
public ActionResult EventDetails(int? eventID, int? action)
{
EventDetailsViewModel model = new EventDetailsViewModel();

if (eventID != null)
{
model.afterPost = true;
model.currentAttendance = getCountAttending(eventID);
model.currentUser = getCurrentUserProfile(User.Identity.Name);
model.eventDetails = getEventDetails(eventID);
model.eventDetails["ActionID"] = action.ToString();
model.eventRestrictions = getEventRestrictions(eventID);
model.usersAttending = getUsersAttending(eventID);
return View(model);
}
else
{
return View();
}
}

View 很大,但我会发布相关的文章:

@if(User.Identity.IsAuthenticated)
{
if (!Model.eventDetails["Event_Owned"].Equals("true"))
{
<div class="joinEventButton">
@if(Model.eventDetails["Event_Current"].Equals("true"))
{
<form method="post" action="@Url.Action("EventDetails", "Event", new{eventID = Int32.Parse(Model.eventDetails["EventID"]), action = Int32.Parse(Model.eventDetails["CODE_RequestInvitation"])})">
<input type="submit" value="Request Invitation" class="submitButton submitButton-green"/>
</form>
}
else
{
<button class="disabledButton disabledButton-grey">Request Invitation</button>
}
</div>
}

为了更好的衡量,我的路线:

    public static void RegisterRoutes(RouteCollection routes)
{
//routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}

所以这个想法是基于身份验证以及他们是否拥有他们正在查看的特定事件,他们将在屏幕上显示不同的按钮。这个特定的是当他们想参加一个事件时,他们可以按下一个按钮来请求邀请。 Controller 知道这一点,因为 int 值作为 CODE_RequestInvitation 传回。返回的操作始终为空。我不知道出了什么问题。

最佳答案

你的问题是使用了参数名action (与 action 属性冲突)。将其更改为另一个名称,它将起作用。检查 <form> 的 html变化前后的元素。

您生成表单的代码很糟糕并且使用了 Int32.Parse()毫无意义。

@using (Html.BeginForm("EventDetails", "Event", { eventID = Model.eventDetails["EventID"], actionID = Model.eventDetails["CODE_RequestInvitation"] }, FormMethod.Post))
{
<input type="submit" value="Request Invitation" class="submitButton submitButton-green"/>
}

并回发给

[HttpPost]
public ActionResult EventDetails(int? eventID, int? actionID)

关于c# - 传递给后 Controller 的参数始终为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27030078/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com