Nút HTML gọi phương thức Hành động và Trình điều khiển MVC


205

Tôi biết điều này không đúng, nhưng để minh họa, tôi muốn làm một cái gì đó như thế này:

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

Mục tiêu của tôi là tạo một nút HTML sẽ gọi phương thức hành động của bộ điều khiển MVC của tôi.


4
Xác định "cuộc gọi." Điều này có thể có nghĩa là một cuộc gọi AJAX, một liên kết đến một trang khác hoặc đăng một biểu mẫu, để đặt tên cho một vài khả năng.
3Dave

Hầu hết các câu trả lời ở trên có thể đã có hiệu quả, tiếc là không có câu trả lời nào phù hợp với tôi. Tôi tìm thấy ở đây một câu trả lời hữu ích từ một bài đăng Stackoverflow khác! Nó hoạt động với tôi trên ASP với khung mạng chấm 4,7 mvc5 và phiên bản bootstrap 3. * và tất nhiên là trong Chế độ xem dao cạo. Mục đích chính của câu hỏi như tôi giả sử là hiển thị một liên kết trông giống như một nút.
Imran Faruqi

Câu trả lời:


265

Không cần phải sử dụng một hình thức nào trừ khi bạn muốn đăng lên hành động. Một nút đầu vào (không gửi) sẽ thực hiện thủ thuật.

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

1
Tôi đã sử dụng đề xuất này bởi vì nó không yêu cầu một hình thức. Cảm ơn bạn!
Aaron Salazar

2
có thể gói nó trong một HtmlHelper giống như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)); }
Menahem

11
nó đưa ra lỗi liên tục chuỗi không hoàn chỉnh trong mã của tôi
Burak Karakuş

5
Nếu bạn muốn truyền tham số với điều đó, bạn có thể sử dụng<input type="button" value="Go Somewhere Else" onclick="location.href='<%: Url.Action("Action", "Controller", new { parameter1 = value1 }) %>'" />
HowlinWulf

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

242

Cú pháp dao động ở đây:

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

4
Tôi vẫn gặp lỗi "hằng số chuỗi bị lỗi" trong IDE mà vẫn không hiển thị đúng. Tôi đã phải sử dụng giải pháp từ đây: stackoverflow.com/a/16420877/410937
atconway

1
@atconway - Thật lạ, nó hoạt động với tôi chính xác như thế nào câu trả lời này trình bày nó. VS2013.
ametren

6
@atconway - có cùng một lỗi nhưng đã thay đổi thẻ từ 'input'thành 'button'và điều đó đã giải quyết lỗi.
Tony Stark

6
Với Tham số <input type = "button" title = "Xóa" value = "D" onclick = "location.href = '@ Url.Action (" Xóa "," phim ", mới {id = item.ID})' "/>
Sandeep

trong trường hợp của tôi chỉ sử dụng <button type="button" class="btn btn-primary" onclick="location.href='@Url.Action("action", "controller")'" >Go Somewhere Else</button>đã thực hiện thủ thuật
Atiq Baqi

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

gõ = "nút" ngăn trang gửi. thay vào đó nó thực hiện hành động của bạn.


16

Thử cái này:

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

Điều này sẽ làm việc cho bạn.


bạn cũng có thể sử dụng bootstrap hoặc các lớp css khác như thế này: @ Html.ActionLink ("DisplayText", "Action", ["Trình điều khiển"], routeValues: null, htmlAttribution: new {@ class = "btn btn-information btn-md ", style =" trắng-space: normal "})
Asaf

15

Bạn có thể sử dụng Url.Action để chỉ định tạo url cho hành động của bộ điều khiển, do đó bạn có thể sử dụng một trong các cách sau:

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

hoặc là:

<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

Đây là cách bạn có thể gửi biểu mẫu của mình đến một bộ điều khiển và phương thức hành động cụ thể trong Dao cạo.

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

10

Dựa trên một vài câu trả lời ở trên, bạn có thể làm điều này:

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

6

Phần <button>tử HTML chỉ có thể gửi lại cho biểu mẫu có chứa nó.

Do đó, bạn cần tạo một biểu mẫu POST cho hành động, sau đó đặt một <button>hoặc <input type="submit" />trong biểu mẫu.


5

Trong trường hợp nếu bạn gặp lỗi là "hằng số chuỗi bị lỗi", hãy sử dụng cú pháp dao cạo sau:

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

5

Mặc dù Phương thức onclick, bạn cũng có thể sử dụng định dạng như sau:

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

Điều này hoạt động tốt hơn nếu bạn có hành động với thuộc tính động từ HttpPost, nó sẽ ngăn các trình thu thập dữ liệu web truy cập vào các liên kết phá hoại đó (nhờ Hector Correa cho thông tin này)
Tahir Khalid

5

tốt hơn nên sử dụng ví dụ này

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


4

Vì vậy, tôi đang sử dụng Dao cạo nhưng điều này sẽ hoạt động bằng cách sử dụng. Về cơ bản, tôi đang gói một nút trong một liên kết.

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


3

Sử dụng ví dụ này:

<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

Nếu bạn đang ở trang chủ ("/ Trang chủ / Chỉ mục") và bạn muốn gọi hành động Index của Trình điều khiển quản trị, việc sau sẽ có hiệu quả với bạn.

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

1

tốt hơn nên sử dụng ví dụ này .

Gọi hành động và bộ điều khiển bằng cách sử dụng ActionLink:

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

0

OK, về cơ bản bạn cần chuyển hành động cho nút và gọi nó khi nhấp xảy ra, nó không cần phải ở bên trong, bạn có thể sử dụng HTML onclicktrên nút để kích hoạt khi nút được nhấp ...

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

0

Bạn luôn có thể chơi xung quanh với htmlHelpers và xây dựng một số thứ

    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);
        }
    }

Và sau đó trên quan điểm gọi nó như thế này

@Html.BtnWithAction("btnCaretakerBack", "Back", "btn btn-primary float-right", "Index", "Caretakers")
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.