标签: actionmethod

如何将JSON作为MVC 5操作方法参数接收

我整个下午都试图在网上爬行,试图在动作控制器中接收一个JSON对象.

这样做的正确和/或更简单的方法是什么?

我尝试过以下方法:1:

    //Post/ Roles/AddUser
    [HttpPost]
    public ActionResult AddUser(String model)
    {
        if(model != null)
        {
            return Json("Success");
        }else
        {
            return Json("An Error Has occoured");
        }

    }
Run Code Online (Sandbox Code Playgroud)

这给了我输入的空值.

2:

    //Post/ Roles/AddUser
    [HttpPost]
    public ActionResult AddUser(IDictionary<string, object> model)
    {
        if(model != null)
        {
            return Json("Success");
        }else
        {
            return Json("An Error Has occoured");
        }

    }
Run Code Online (Sandbox Code Playgroud)

这给了我jquery方面的500错误,试图发布到它?(意思是它没有正确绑定).

这是我的jQuery代码:

<script>
function submitForm() {

    var usersRoles = new Array;
    jQuery("#dualSelectRoles2 option").each(function () {
        usersRoles.push(jQuery(this).val());
    });
    console.log(usersRoles);

    jQuery.ajax({
        type: "POST",
        url: "@Url.Action("AddUser")",
        contentType: "application/json; charset=utf-8",
        dataType: "json", …
Run Code Online (Sandbox Code Playgroud)

asp.net asp.net-mvc json actionmethod

65
推荐指数
2
解决办法
19万
查看次数

ASP .NET MVC NonAction含义

谁能告诉我为什么要使用NonAction?我的意思是说我有一个包含多个提交值的表单:Update,Delete或Insert.由于所有提交按钮具有相同的共同形式,因此我在控制器内切换提交值并采取相应措施.

像这样:

public ActionResult asd(string submitButton){
     switch(submitButton){
         case "Insert":
             return Insert();
         // bla bla bla
     }
}

[NonAction]
public ActionResult Insert(){
    // some code inside here
    return View();
}
Run Code Online (Sandbox Code Playgroud)

再一次,为什么我应该使用NonAction而不是这样的东西:

public void Insert(){
    // some code inside here
}
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc actionmethod

36
推荐指数
5
解决办法
5万
查看次数

使用ASP.NET MVC Action方法做了哪些聪明的事情

ASP.NET MVC控制器操作方法主要用于处理"业务"操作,但它可以用于更多.

我认为看到人们创造的创造性,有用的东西对他人来说可能是实用的或有用的,这会很有趣.

这是我的贡献:

Javascript文件连接器 - 减少http请求的数量:

    [OutputCache(Duration = 5 * 60, VaryByParam="")]  // DONT USE "None" here *
    public ContentResult RenderJavascript(){

        StringBuilder js = new StringBuilder();
        StringWriter sw = new StringWriter(js);

        // load all my javascript files
        js.AppendLine(File.ReadAllText(Request.MapPath("~/Scripts/jquery.hoverIntent.minified.js")));
        js.AppendLine(File.ReadAllText(Request.MapPath("~/Scripts/jquery.corner.js")));
        js.AppendLine(File.ReadAllText(Request.MapPath("~/Scripts/rollingrazor.js")));

        return new ContentResult()
        {
            Content = js.ToString(),
            ContentType = "application/x-javascript"
        };
    }
Run Code Online (Sandbox Code Playgroud)

映射到它的路线:

  // javascript
  routes.MapRoute(
     "js-route",
     "dynamic/js",
     new { controller = "Application", action = "RenderJavascript" }
  );
Run Code Online (Sandbox Code Playgroud)

请从您的母版页中查看:

    <script type="text/javascript" src="/dynamic/js"></script>
Run Code Online (Sandbox Code Playgroud)

请注意,我已为输出设置了缓存,因此如果您要更改JS并刷新页面,则可能需要禁用缓存!

我需要回来找出如何gzip它.

*您不应该使用VaryByParam ="None",因为这会导致发送Vary标头,这会导致浏览器返回并检查新版本.如果你真的需要更改你的js内容,那么你的用户只需要等待5分钟!

.net asp.net-mvc actionmethod

24
推荐指数
1
解决办法
1918
查看次数

保持控制器薄(太多的操作方法)

我正在研究我的第一个真正的ASP.NET MVC项目,我注意到我一直在工作的控制器变得相当大.这似乎违背了保持控制器薄的最佳做法.

我已经做好了将业务逻辑从控制器中删除的工作.我为此使用了一个单独的层.每个操作主要调用业务层中的方法,并根据模型状态是否有效来协调最终结果.

也就是说,控制器有很多动作方法.直觉上,我想将控制器分解为子控制器,但我没有看到一个简单的方法.我可以简单地将控制器分解为单独的控制器,但是我松开了层次结构,感觉有点脏.

是否有必要使用大量精简操作重构控制器?如果是这样,最好的方法是什么?

asp.net-mvc actionmethod asp.net-mvc-controller

22
推荐指数
1
解决办法
4138
查看次数

ASP.NET MVC:对操作强制执行A​​JAX请求

我正在寻找一种方法来强制执行控制器的操作只能通过AJAX请求访问.

在调用action方法之前执行此操作的最佳方法是什么?我想从我的动作方法重构以下内容:

if(Request.IsAjaxRequest())
    // Do something
else
    // return an error of some sort
Run Code Online (Sandbox Code Playgroud)

我想象的是ActionMethodSelectorAttribute可以像[AcceptVerbs]属性一样使用.我没有经验包装这样的自定义属性.

ajax asp.net-mvc actionmethod controller-action

11
推荐指数
1
解决办法
4402
查看次数

ASP.NET MVC - 带有URL附加参数的POST操作方法

使用ASP.net MVC是否可以将表单POST到控制器操作,该操作包括不在表单中的参数,但是来自URL?

例如

GroupController中的Action方法:

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Create(int idOne, int idTwo, Model model)
    { ... }
Run Code Online (Sandbox Code Playgroud)

路线:

"{controller}/{action}/{idOne}/{idTwo}"
Run Code Online (Sandbox Code Playgroud)

发布网址:

/Employee/Show/1/42
Run Code Online (Sandbox Code Playgroud)

在此示例中,表单将发布到不同的控制器,模型具有正确的值,但其他参数的默认值为0.

我期望的行为是ModelBinder会看到我有两个匹配给定路由的参数,并以与GET操作相同的方式将当前值1和42分配给参数.

这种行为不受支持,或者我错过了什么?

编辑:要清楚,Show控制器视图上的Employee表单包含一个发布到不同控制器的表单.我们可以称之为Group.

表单操作URL如下所示

/Groups/Create/0/0
Run Code Online (Sandbox Code Playgroud)

表格声明如下

Html.BeginForm("Create", "Groups")
Run Code Online (Sandbox Code Playgroud)

尝试了许多不同的重载后,Html.BeginForm我发现仅当表单操作URL与浏览器地址栏中的当前URL匹配时才会映射参数.

因此,如果我导航到URL,/Groups/Create/1/42我将有一个新表格.如果我然后提交表单,则URL路由值将传递给POST操作.

c# asp.net-mvc modelbinders actionmethod

10
推荐指数
1
解决办法
3万
查看次数


禁止从地址栏调用操作方法

我的控制器中有一个方法,我不想从浏览器的地址栏中调用...

有没有办法做到这一点?也许某种注释,路由配置中的修改?我有哪些选择?

controller actionmethod asp.net-mvc-4

9
推荐指数
2
解决办法
9721
查看次数

ASP.NET MVC:如何将ActionResult转换为字符串?

我想采用现有的action方法,将其返回值呈现给字符串并将其作为JSON发送给AJAX请求的响应.

为此,我需要将ActionResult渲染为字符串.我该怎么做呢?

我们可以使用this.Content()将字符串转换为ActionResult.

更新

现有和第一个操作方法返回一个ActionResult类型,但它确实返回一个ViewResult来响应HTTP post请求.我有第二个动作方法(我的外观),它返回一个响应AJAX请求的JsonResult.我希望第二个动作方法使用第一个动作方法来呈现HTML.

在宏观方案中,我想要一个ActionResult(从一个动作方法生成),不仅可以通过标准的HTTP帖子检索,还可以通过Facade动作方法(第二个动作方法)通过AJAX请求检索.这样,作为开发人员,我可以选择使用HTTP Post或AJAX来检索页面的呈现.

对不起,我试图让这个更新尽可能短.谢谢.

string asp.net-mvc json actionresult actionmethod

8
推荐指数
1
解决办法
9950
查看次数

通过带有 params 关键字的 GET 将多个参数传递给 MVC 控制器操作

有没有办法通过使用 params 关键字将多个参数传递给带有 GET 的操作方法,如下所示?

http://.../Method/param1/param2/param3/..../paramN
Run Code Online (Sandbox Code Playgroud)

动作方法应如下:

public ActionResult Method(params string[] parameters)
{
//Do what ever.
}
Run Code Online (Sandbox Code Playgroud)

c# parameters asp.net-mvc actionmethod

6
推荐指数
1
解决办法
1294
查看次数