1

外部 Web サービスとの通信に使用したいモデルがあります。私のウェブサイトで特定の投稿アクションを呼び出すことになっています。

public class ConfirmationModel{
    ...
    public string TransactionNumber {get; set;}
}

public ActionResult Confirmation(ConfirmationModel){
...
}

問題は、それらが渡すパラメーター名が人間が読める形式ではないことです。そして、それらをより読みやすいモデルにマッピングしたいと考えています。

't_numb' ====> 'TransactionNumber'

これを自動的に行うことはできますか? 多分属性で?ここで最善のアプローチは何ですか?

4

2 に答える 2

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表示されます。TransactionNumber

于 2013-08-04T19:14:01.073 に答える
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

于 2013-08-07T20:33:30.983 に答える