我希望在我的控制器中有一个简单的Action,它接受一些可选值和一些整数值。
这是我希望拥有的路线:
HTTP.POST
/review/create
这是我想要的Action方法......
[AcceptVerbs(HttpVerbs.Post)]
public JsonResult Create(int userId,
int addressId,
byte baseScore,
byte reviewType,
string subject,
string description)
{ ... }
我有一种没有受过教育的印象,即上面所有这些论点都将由表单集合值填充......但它并没有发生。另外,我不知道如何写一条路线来处理那些...因为这些值是形式后数据....
这是我的global.asax ....
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
// Api - Search methods.
routes.MapRoute(
"Search Methods",
"{controller}/{action}"
);
实际上,从不调用action方法,因为它似乎找不到它:(
但是,如果没有任何这些参数的创造和行动,那么它会找到它??????????
您如何编写路线和操作方法来接受路径/评论/创建的一些必需参数和一些可选参数?
答案 0 :(得分:0)
据我所知,您可以像这样重写控制器操作:
public ActionResult Create(int foo, int bar, byte blah, string name, int? xxx) {
// code here
}
然后,ModelBinder将确保设置foo,bar和blah。名称和xxx可以为null。我暂时无法测试它,但我认为动作的返回类型应为ActionResult
。
答案 1 :(得分:0)
如果您正在POST表单,请确保表单中的元素(文本框,复选框,文本区等)的id与您方法中的参数匹配。作为替代方法,您可以将FormCollection
传递给方法,并执行myFormCollection["foo"]
以获取值的字符串表示形式(然后可以将其解析为int)。
答案 2 :(得分:0)
根据我的经验,您在这个问题上缺少一些关键要素和概念。
首先,我不相信你可以在没有表格的情况下执行POST。表单必须包含控件,您可以从中获取传递给控制器方法的值。如果目标是简单地对您的POST控制器方法进行单元测试,那么只需在您的测试中直接调用该方法,根据您的一条评论,您可能会看到该方法。如果您涉及视图,那么您正在进行集成测试,而不是单元测试。无论测试类型如何,测试都将失败,因为您选择不构建表单。即使你设法使用Fiddler,Firebug或任何其他机制强制POST,你仍然没有测试视图,你正在测试HTTP协议。
我强烈建议您使用网络应用程序测试工具(例如WatiN或Selenium)来测试您的网页,而不是将一个快速而肮脏的测试放在一起t测试任何有用的东西。
答案 3 :(得分:0)
在您的帖子请求中设置content-type =“application / json; charset = UTF-8”并以JSON格式传递method参数的值。这应该使Asp.MVC不要在FormCollection中查找这些值。