稍后指定参数类型并保持MVC命名约定

本文关键字:MVC 命名约定 类型 参数 | 更新日期: 2023-09-27 18:18:36

我在一种情况下,我想在方法内定义参数类型。但是如果我这样做:

    public class UserModel
    {
        public string InputName { get; set; }
    }
    [HttpPost]
    public ActionResult Index(object obj)
    {
        UserModel test = obj as UserModel;
        ViewBag.Test = test.InputName;
        return View();
    }

命名约定,有应该是在我的obj张贴表单时,不发生?我认为。我想这样做,因为obj类型在别处。这有办法吗?我需要重写一些东西吗?

编辑:-另一种解决我的问题的方法。

当你在MVC web应用程序中发布表单时。通过在ActionResult中声明参数类型来接收数据。这里有一个命名约定,对吧?但是如果我不能马上知道参数类型呢?我如何在ActionResult方法中声明参数类型,并使命名约定在那里发生?

希望这是有意义的,抱歉我的英语!


谢谢你的建议!我找到了另一种解决问题的方法。而现在我却被困在这里了:)

从另一个控制器查看字符串

稍后指定参数类型并保持MVC命名约定

[HttpPost]
     public ActionResult Index(object obj)   
     {    
         UserModel test = new UserModel();
         TryUpdateModel(test);  
         ViewBag.Test = test.InputName;     
             return View();     
      } 

使用MVC和而不是使用强类型操作参数是在伤害自己。如果你的Index动作模型是不相交的,你可能应该使用多个控制器,每个控制器都有自己的Index动作。至少,这些应该是同一个控制器中的独立动作。也许您可以处理在客户端调用特定操作的决定:

<script type="text/javascript">
    $(function() {
        $('#myButton').click(function(e) {
            var url = "User/Index";
            data = { InputName: 'username' };
            if(someCondition) {
                url = "User/AnotherAction";
                data = { SomeOtherModelField: 'someOtherValue' };
            }
            $.ajax({
                url: url,
                type: 'POST',
                data: data,
                success: function(e) {
                    alert('post succeeded');
                }
            });
        });
    });
</script>

你的控制器可以像这样:

public class UserController : Controller
{
    [HttpPost]
    public ActionResult Index(UserModel model)
    {
        // do UserModel stuff
        return View();
    }
    [HttpPost]
    public ActionResult AnotherAction(SomeOtherModel model)
    {
        // do SomeOtherModel stuff
        return View();
    }
}