MVC 컨트롤러 및 액션 메서드를 호출하는 HTML 버튼


204

나는 이것이 옳지 않다는 것을 알고 있지만, 설명을 위해 다음과 같은 것을하고 싶다 :

<%= Html.Button("Action", "Controller") %>

내 목표는 내 MVC 컨트롤러의 액션 메소드를 호출하는 HTML 버튼을 만드는 것입니다.


4
"통화"를 정의하십시오. 이는 AJAX 호출, 다른 페이지에 대한 링크 또는 양식 게시와 같은 몇 가지 가능성을 의미 할 수 있습니다.
3Dave

위의 대부분의 답변은 이미 효과가 있었지만 불행히도 아무도 나를 위해 일하지 않았습니다. 내가 발견 여기에 또 다른 유래 포스트에서 유용한 답변을! 그것은 도트 네트 프레임 워크 4.7 mvc5와 부트 스트랩 버전 3. * 및 Razor View에서 ASP에서 나를 위해 일했습니다. 내가 생각하는 질문의 주요 목적은 버튼처럼 보이는 링크를 표시하는 것입니다.
Imran Faruqi

답변:


264

조치를 게시하지 않으면 양식을 전혀 사용할 필요가 없습니다. 입력 버튼 (제출하지 않음)이 트릭을 수행합니다.

  <input type="button"
         value="Go Somewhere Else"
         onclick="location.href='<%: Url.Action("Action", "Controller") %>'" />

1
이 제안은 양식이 필요하지 않기 때문에 사용했습니다. 감사합니다!
Aaron Salazar

2
같은 Html 헬퍼 무언가를 포장 할 수있다public static string ActionButton(this HtmlHelper helper, string action, string controller, string text) { return String.Format("<input type=\"button\" value=\"{0}\" onclick=\"location.href='{1}' />",text,Url.Action(action,controller)); }
므 나헴

11
내 코드에 종료되지 않은 문자열 상수 오류가 발생합니다.
Burak Karakuş

5
그와 함께 매개 변수를 전달하려면 다음을 사용할 수 있습니다<input type="button" value="Go Somewhere Else" onclick="location.href='<%: Url.Action("Action", "Controller", new { parameter1 = value1 }) %>'" />
HowlinWulf

1
<input type = "button"value = "DeleteAll"onclick = "location.href = '@ Url.Action ("DeleteAll ","Home ")'"/>
Yuchao Zhou

242

면도기 구문은 다음과 같습니다.

<input type="button" value="Create" onclick="location.href='@Url.Action("Create", "User")'" />

4
여전히 제대로 렌더링되지 않은 IDE에서 여전히 "완전하지 않은 문자열 상수"오류가 발생합니다. 나는 여기에서 해결책을 사용해야했다 : stackoverflow.com/a/16420877/410937
atconway

1
@atconway-이상합니다.이 답변이 제시하는 방식과 정확히 일치했습니다. VS2013.
ametren

6
@atconway-같은 오류가 있었지만 태그를에서 'input'로 변경 'button'하여 오류를 해결했습니다.
Tony Stark

6
매개 변수 <input type = "button"title = "Delete"value = "D"onclick = "location.href = '@ Url.Action ("Delete ","movies ", new {id = item.ID})' "/>
Sandeep

내 경우에는 그냥 사용 <button type="button" class="btn btn-primary" onclick="location.href='@Url.Action("action", "controller")'" >Go Somewhere Else</button>하여 트릭을 수행
Atiq Baqi

69
<button type="button" onclick="location.href='@Url.Action("MyAction", "MyController")'" />

type = "button"은 페이지를 제출하지 못하게합니다. 대신 작업을 수행합니다.


16

이 시도:

@Html.ActionLink("DisplayText", "Action", "Controller", route, attribute)

이것은 당신을 위해 작동합니다.


@ Html.ActionLink ( "DisplayText", "Action", [ "Controller"], routeValues ​​: null, htmlAttributes : new {@ class = "btn btn-info btn-md와 같은 부트 스트랩 또는 다른 CSS 클래스를 사용할 수도 있습니다. ", style ="white-space : normal "})
Asaf

15

Url.Action을 사용하여 컨트롤러 조치에 대한 URL 생성을 지정할 수 있으므로 다음 중 하나를 사용할 수 있습니다.

<form method="post" action="<%: Url.Action("About", "Home") %>">
   <input type="submit" value="Click me to go to /Home/About" />
</form>

또는:

<form action="#">
  <input type="submit" onclick="parent.location='<%: Url.Action("About", "Home") %>';return false;" value="Click me to go to /Home/About" />
  <input type="submit" onclick="parent.location='<%: Url.Action("Register", "Account") %>';return false;" value="Click me to go to /Account/Register" />
</form>

11

이것은 Razor의 특정 컨트롤러 및 작업 방법에 양식을 제출하는 방법입니다.

 <input type="submit" value="Upload" onclick="location.href='@Url.Action("ActionName", "ControllerName")'" />

10

위의 몇 가지 답변을 바탕으로 다음을 수행 할 수 있습니다.

<button onclick="location.href='@Url.Action("ActionName", "ControllerName")'" />

6

HTML <button>요소는이를 포함하는 양식으로 만 포스트 백 할 수 있습니다.

따라서 조치에 POST하는 양식을 작성한 다음 <button>또는 <input type="submit" />양식 을 넣어야합니다 .


5

"unterminated string constant"로 오류가 발생하는 경우 다음 면도기 구문을 사용하십시오.

<input type="button" onclick="@("location.href='"+ Url.Action("Index","Test")+ "'")" />

5

이 예제를 사용하는 것이 좋습니다

<a href="@Url.Action("Register","Account", new {id=Item.id })"
class="btn btn-primary btn-lg">Register</a>


4

그래서 Razor를 사용하고 있지만 둘 중 하나를 사용하여 작동합니다. 기본적으로 링크에 버튼을 배치하고 있습니다.

<a href="Controller/ActionMethod">
    <input type="button" value="Click Me" />
</a>


4

onclick 방법에도 불구하고 다음과 같이 formaction을 사용할 수도 있습니다.

<button type="submit" id="button1" name="button1" formaction='@Url.Action("Action", "Controller")'>Save</button>

당신은 HttpPost와 동작이있는 경우는 그 파괴적인 링크를 (이 정보에 대한 헥터 코레아 덕분에) 방문하는 웹 크롤러가 중지됩니다 속성 동사 이것은 잘 작동
타히르 칼리드

3

이 예제를 사용하십시오.

<button name="nameButton" id="idButton" title="your title" class="btn btn-secondary" onclick="location.href='@Url.Action( "Index","Controller" new {  id = Item.id })';return false;">valueButton</button>

1

홈 페이지 ( "/ Home / Index")에 있고 Admin controller의 Index 액션을 호출하려는 경우 다음이 적합합니다.

<li><a href="/Admin/Index">Admin</a></li>

1

이 예제를 사용하는 것이 좋습니다 .

다음을 사용하여 호출 조치 및 컨트롤러 ActionLink:

@Html.ActionLink("Submit", "Action", "Controller", route, new { @class = "btn btn-block"})

0

좋아, 기본적으로 액션을 버튼에 전달하고 클릭이 발생할 때 호출해야하며, from 안에있을 필요가 없으며 버튼 을 클릭 할 때 HTML onclickon 버튼 을 사용 하여 트리거 할 수 있습니다 ...

<button id="my-button" onclick="location.href='@Url.Action("YourActionName", "YourControllerName")'">Submit</button>

0

당신은 항상 htmlHelpers로 놀면서 물건을 만들 수 있습니다

    public static IHtmlContent BtnWithAction(this IHtmlHelper htmlHelper, string id, string text, string css="", string action="", string controller="")
    {
        try
        {
            string str = $"<button id=\"{id}\" class=\"{css}\" type=\"button\" ###>{text}</button>";
            if (!string.IsNullOrEmpty(action) && !string.IsNullOrEmpty(controller))
            {                    
                string url = ((TagBuilder)htmlHelper.ActionLink("dummy", action, controller)).Attributes["href"];
                var click = !string.IsNullOrEmpty(url) ? $"onclick=\"location.href='{url}'\"" : string.Empty;
                return new HtmlString(str.Replace("###", click));
            }
            return new HtmlString(str.Replace("###", string.Empty));
        }
        catch (Exception ex)
        {
            Log.Error(ex, ex.Message);
            var fkup = "<script>alert(\"assumption is the mother of all failures\")</script>";
            return new HtmlString(fkup);
        }
    }

그리고보기에서 이것을 이렇게 호출하십시오

@Html.BtnWithAction("btnCaretakerBack", "Back", "btn btn-primary float-right", "Index", "Caretakers")
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.