我有一个模型,我想用它来与外部Web服务进行通信。它应该在我的网站上调用特定的帖子。
public class ConfirmationModel{
...
public string TransactionNumber {get; set;}
}
public ActionResult Confirmation(ConfirmationModel){
...
}
问题是他们传递的参数名称不是人类可读的。我想把它们映射到我更可读的模型。
't_numb' ====> 'TransactionNumber'
这可以自动完成吗?有一个属性可能吗?这里最好的方法是什么?
答案 0 :(得分:1)
创建模型绑定器:
using System.Web.Mvc;
using ModelBinder.Controllers;
public class ConfirmationModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var model = new ConfirmationModel();
var transactionNumberParam = bindingContext.ValueProvider.GetValue("t_numb");
if (transactionNumberParam != null)
model.TransactionNumber = transactionNumberParam.AttemptedValue;
return model;
}
}
在Global.asax.cs中初始化它:
protected void Application_Start()
{
ModelBinders.Binders.Add(typeof(ConfirmationModel), new ConfirmationModelBinder());
}
然后在你的行动方法
[HttpPost]
public ActionResult Confirmation(ConfirmationModel viewModel)
您应该会看到t_numb
的值显示在viewmodel的TransactionNumber
属性中。
答案 1 :(得分:0)
同意模型绑定器更好:虽然这是另一个想法
public ActionResult Create(FormCollection values)
{
Recipe recipe = new Recipe();
recipe.Name = values["Name"];
// ...
return View();
}
并且很好地阅读了两篇文章:http://odetocode.com/blogs/scott/archive/2009/04/27/6-tips-for-asp-net-mvc-model-binding.aspx