Reputation: 30823
This is an ASP.Net MVC 5
project.
I have read the following useful post:
ASP.Net MVC How to pass data from view to controller
Which explains how to pass data from View
to Controller
in ASP.Net MVC
. The main ideas in the post are either
View
and name-convention-parameters in Action Controller
, or route values
match with the parameters in the Action Controller
.Now I have a slightly different case here... and would like to get some ideas for work-around.
Similar to method (2) above, I already have an action-link with anonymous object having name-convention parameters generated dynamically using razor like the following:
@Html.ActionLink("Detail", item.DetailsName, item.ControllerName,
new {
pid = item.Pid, eid = item.Eid, mid = item.Mid, cid = item.Cid,
manNo = item.TypeItem == "Create" ? item.ManCreateNo : item.ManEditNo,
caneNo = item.TypeItem == "Create" ? item.CaneCreateNo : item.CaneEditNo,
command = userCanAccept ? "acc" : "pass", from = ViewBag.From
}, null)
And (one of the possible) corresponding Action Controller
called by the ActionLink
looks like the following:
public ActionResult DetailsChange(int pid, int eid, int mid, int cid, int manNo = 1, int caneNo = 1, string command = null, string from = null, string comment = null)
Now, as you can see, the Action Link
's parameters in the View
and the Action Controller
's parameters in the Controller
match perfectly, except for one: the comment
.
All the other parameters can be rendered by the View
by razor at rendering time, but the comment
is supposed to be a user-typed input (text).
Now, how do I pass this comment
from the View
to the Controller
, together with the rests of the parameters, when the Action Link
is pressed? Is there work around for this in ASP.Net MVC 5
?
Upvotes: 0
Views: 263
Reputation: 50728
Generally you would use a form and post this data back, not use an ActionLink. But, since the ActionLink is basically an <a>
with the HREF set to the action method URL, you can append it using javascript (in HTML attributes, if you give an ID of CmtLink, for example):
$("#CmtLink").on("click", function() {
var href = $(this).attr("href");
//I assume it doesn't exist, but it's good to check for an existing comment parameter
//also assume at least one parameter present
//Also assume comment control is textbox, not textarea
href += "&comment=" + $("#comment").val();
$("#CmtLink").attr("href", href);
});
On click, this can then always grab the most recent value entered, or could cancel the default behavior if comments are empty.
Upvotes: 1