Tôi có một bộ điều khiển để hiển thị một mô hình (Người dùng) và muốn tạo một màn hình chỉ bằng một nút để kích hoạt. Tôi không muốn các trường trong biểu mẫu. Tôi đã có id trong url. Làm thế nào tôi có thể thực hiện điều này?Làm cách nào để tạo một httppost có cùng thông số từ httpget?
Trả lời
Bạn có thể sử dụng một lĩnh vực tiềm ẩn bên trong các hình thức:
<% using (Html.BeginForm()) { %>
<%= Html.HiddenFor(x => x.Id) %>
<input type="submit" value="OK" />
<% } %>
hoặc vượt qua nó trong hành động có dạng:
<% using (Html.BeginForm("index", "home",
new { id = RouteData.Values["id"] }, FormMethod.Post)) { %>
<input type="submit" value="OK" />
<% } %>
Cách đơn giản nhất cho tình huống đơn giản như vậy là để cho một tên để gửi nút và kiểm tra hành động nếu nó có giá trị hay không. Nếu nó có giá trị, sau đó nó Đăng hành động, nếu không, sau đó nó Get hành động:
<% using (Html.BeginForm("index", "home",
new { id = RouteData.Values["id"] }, FormMethod.Post)) { %>
<input type="submit" value="OK" name="btnActivate" />
<% } %>
Đối với Cs bạn có thể kết hợp được và sau khi điều khiển các phương pháp trong một:
public ActionResult Index(int? id, string btnActivate)
{
if (!string.IsNullOrEmpty(btnActivate))
{
Activate(id.Value);
return RedirectToAction("NextAction");
}
return View();
}
Một hơi muộn cho bên này nhưng tôi thấy một giải pháp dễ dàng hơn cho những gì tôi nghĩ là một trường hợp sử dụng khá phổ biến nơi bạn nhắc GET ("bạn có chắc chắn muốn blah blah blah?") và sau đó hành động trên POST bằng cách sử dụng cùng một đối số.
Giải pháp: sử dụng thông số tùy chọn. Không cần cho bất kỳ lĩnh vực ẩn và như vậy.
Lưu ý: Tôi chỉ thử nghiệm điều này trong MVC3.
public ActionResult ActivateUser(int id)
{
return View();
}
[HttpPost]
public ActionResult ActivateUser(int id, string unusedValue = "")
{
if (FunctionToActivateUserWorked(id))
{
RedirectToAction("NextAction");
}
return View();
}
Trên lưu ý cuối cùng, bạn không thể sử dụng chuỗi.Empty thay cho ""
vì nó phải là một hằng số biên dịch. Và đó là một nơi tuyệt vời để đưa những bình luận hài hước cho người khác để tìm :)
Cách tiếp cận của tôi không phải là thêm tham số không sử dụng vì nó có vẻ gây nhầm lẫn và thực hành không tốt. Thay vào đó, những gì tôi làm là thêm "bài" để đặt tên hành động của tôi:
public ActionResult UpdateUser(int id)
{
return View();
}
[HttpPost]
public ActionResult UpdateUserPost(int id)
{
// Do work here
RedirectToAction("ViewCustomer", new { customerID : id });
}
Sử dụng [ActionName] thuộc tính - Bằng cách này bạn có thể có các URL dường như trỏ đến vị trí tương tự nhưng thực hiện hành động khác nhau tùy thuộc vào phương thức HTTP :
[ActionName("Index"), HttpGet]
public ActionResult IndexGet(int id) { ... }
[ActionName("Index"), HttpPost]
public ActionResult IndexPost(int id) { ... }
Hoặc bạn có thể kiểm tra các phương thức HTTP trong mã:
public ActionResult Index(int id)
{
if (string.Equals(this.HttpContext.Request.HttpMethod, "POST", StringComparison.OrdinalIgnoreCase))
{ ... }
}
- 1. ASP.NET MVC 3: Làm thế nào để ép buộc một ActionLink thực hiện một HttpPost thay vì một HttpGet?
- 2. asp.net mvc - [HttpPost/HttpGet] so với [AcceptVerbs (HttpVerbs.Post/Get)]
- 3. Làm cách nào để tạo cùng một mã thông báo này trong PHP? (Từ .NET)
- 4. Thêm thông số vào HttpPost trên httpclient http: //
- 5. http_build_query có cùng thông số tên
- 6. Làm cách nào để chọn một số hàng có giới hạn với cùng một thuộc tính?
- 7. Ném một lỗi trở về jQuery từ một MVC HttpPost
- 8. Tôi làm cách nào để có được cookie từ HttpClient?
- 9. tên thông số với cùng một tên
- 10. Làm cách nào để tạo một enum bằng các số?
- 11. Làm cách nào để tạo một bảng HTML có cùng chiều rộng với thẻ div chứa?
- 12. Làm cách nào để tạo vòng kết nối có số?
- 13. C++: tạo xâu từ mẫu thông số
- 14. Làm cách nào để tìm thông số vị trí cuối cùng trong Linux
- 15. Cách nhận nhiều thông số có cùng tên từ URL trong giá treo?
- 16. FLEX: Có cách nào để trả lại mã thông báo cùng một lúc
- 17. Làm cách nào để tạo một biến số biến?
- 18. Có cách nào để khởi tạo một đối tượng thông qua một băm?
- 19. Tạo cùng một chuỗi số ngẫu nhiên
- 20. Làm cách nào để nhận thuộc tính `.class` từ thông số loại chung?
- 21. Làm cách nào để tạo một gzip giống hệt nhau của cùng một tệp?
- 22. Làm thế nào để tạo ra một hàm chuyển đổi một số thành Hexavigesimal tính từ?
- 23. Làm cách nào để tạo bảng SQL từ tệp XML có số nút động?
- 24. Làm cách nào để tạo một JAR từ .java
- 25. Làm cách nào để tạo một từ điển trong Java?
- 26. Làm cách nào để tôi có thể tạo một số mục trong một ListBox đậm?
- 27. Phương thức GET và POST có cùng tên Hành động trong cùng một Bộ điều khiển
- 28. Cách tạo đối tượng thông số chung
- 29. Làm thế nào để có được các thông số từ aspx.cs để javascript
- 30. Làm cách nào để mã hóa thông số URL?
Nhưng tôi không thể có httpost và httpget với cùng paramets, bạn có thể hiển thị các mẫu cho cs quá? – waldecir
@waldecir, không, bạn không thể có hai hành động điều khiển với cùng một đối số. Bạn sẽ cần phải sửa đổi chữ ký của hành động GET hoặc POST của bạn. –
Có, tôi biết. trang firt của tôi là một nhận được với id để hiển thị các infos về người dùng, vì vậy tôi cần một bài để kích hoạt/hủy kích hoạt, làm thế nào sẽ là cuộc gọi httppost? – waldecir