Этот вопрос действительно похож на мой последний, но это связано с передачей нескольких параметров. Мой контроллер имеет два метода с тем же именем, но один получает значение nullable int, чтобы определить, какое действие нужно предпринять для публикации (я не знаю, является ли это хорошим дизайнерским решением). Вот код:Параметр, переданный контроллеру почты, всегда равен нулю
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();
}
}
вид огромен, но я выложу соответствующую часть:
@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 }
);
}
Таким образом, идея заключается в том, что на основе проверки подлинности и наличия у них конкретного события, на которое они смотрят, на экране будут отображаться разные кнопки. Это определенно для того, когда они хотят присоединиться к событию, они могут нажать кнопку, чтобы запросить приглашение. Контроллер знает это из-за того, что значение int передается как CODE_RequestInvitation. Возвращаемое действие всегда равно null. Я не могу понять, что случилось.
Попробуйте поместить EVENTID в скрытом поле в вашей форме, и это, возможно, отправят на потом. – CRice
Осмотрите html. Какова ценность атрибута формы 'action'? –