稍后指定参数类型并保持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方法中声明参数类型,并使命名约定在那里发生?
希望这是有意义的,抱歉我的英语!
谢谢你的建议!我找到了另一种解决问题的方法。而现在我却被困在这里了:)
从另一个控制器查看字符串
[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();
}
}