MVC: Sending an ID from a view to a controller and doing something with it

Mike Miller
Mike Miller used Ask the Experts™
on
I have a button on a view located at: localhost:99998/MyController/Edit/5017

 <input type="button" value="Delete" class="btn btn-danger" onclick="location.href='@Url.Action("DelRec", "MyController")'" />

Open in new window


I want to take the ID (in this case 5017)
send it to the controller action (DelRec)
then update the correlating record (5017)

How do I do this?
Comment
Watch Question

Do more with

Expert Office
EXPERT OFFICE® is a registered trademark of EXPERTS EXCHANGE®
Prakash SamariyaIT Professional
Top Expert 2015

Commented:
Hope your controller action method "DelRec" has parameter to accept ID like:
public ActionResult DelRec(int id)
{...}

Open in new window

To get id from URL (as your current url is : localhost:99998/MyController/Edit/5017)
Store into variable [myId]
@{ ... 
var myId = Url.RequestContext.RouteData.Values["id"]; 
...}

Open in new window

To pass parameter (here id) use below code (use variable [myId])
 <input type="button" value="Delete" class="btn btn-danger" 
onclick="location.href='@Url.Action("DelRec", "MyController", new {id=myId})'" />

Open in new window

Mike MillerSoftware Engineer

Author

Commented:
Seems like this way is trying to redirect to a View called DelRec, unless I'm doing something wrong. All I want to do is run some code.
Software Engineer
Commented:
Ok I got something that works. I don't necessarily like it and I'm certain there is a better way, but for now this will have to do

View (added second form)...
@using (Html.BeginForm("DelRec", "MyController", FormMethod.Post, new { @class = "form", id = "dr" }))
{
    <div class="form-horizontal">
        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                @Html.HiddenFor(model => model.ID)
                <input type="submit" value="Delete request" style="border:0px;border-style:none;background-color:#fff;text-decoration:underline;padding:0px;" />
            </div>
        </div>
    </div>

Open in new window


Controller...
 [HttpPost]
        public ActionResult DelRec(MyController m-ctrl)
        {
            if (ModelState.IsValid)
            {
                try
                {
...stuff here
                }
                catch
                {
                    return RedirectToAction("errView");
                }                
            }
            return RedirectToAction("aView");
        }

Open in new window

OWASP: Forgery and Phishing

Learn the techniques to avoid forgery and phishing attacks and the types of attacks an application or network may face.

Prakash SamariyaIT Professional
Top Expert 2015

Commented:
@Mike, it is not necessary to create form just to send your id to some other action method, If you have other work to manipulate and send, then it is fine!

Just for sending id to other action method, I guess my solution will work #a42061177 !
Mike MillerSoftware Engineer

Author

Commented:
I was not successful in getting your solution to work. As I stated earlier, it was directing my browser to a view called DelRec/ID
Furthermore, my initial request was to update a record not "Just for sending id to other action method"

I would love to know how to do this correctly as while this "add another form" method works for me now, I see this as being problematic most other times.
Prakash SamariyaIT Professional
Top Expert 2015

Commented:
<input type="button" value="Delete" class="btn btn-danger" onclick="location.href='@Url.Action("DelRec", "MyController")'" />
that's what your question stated!
I want to take the ID (in this case 5017)
send it to the controller action (DelRec)
You were needed take id from edit url, and then to pass id to DelRec!

Anyways, best of luck!
Mike MillerSoftware Engineer

Author

Commented:
No other relevant solutions provided...figured it out myself

Do more with

Expert Office
Submit tech questions to Ask the Experts™ at any time to receive solutions, advice, and new ideas from leading industry professionals.

Start 7-Day Free Trial