ASP.NET MVC 3 将 KeyValuePair 类型的用户控件绑定到 ViewModel [英] ASP.NET MVC 3 binding user control of type KeyValuePair to ViewModel

查看:17
本文介绍了ASP.NET MVC 3 将 KeyValuePair 类型的用户控件绑定到 ViewModel的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建了一个继承 KeyValuePair 的特殊用户控件.在我的 ViewModel 中,有一个名为 lookup 的属性

I have created a special User Control which inherits KeyValuePair. Inside my ViewModel, there is a property called lookup

[UIHint("Lookup")]
public KeyValuePair<string, string> lookup { get; set; }

用户控制是

Html.TextBoxFor(m => m.Value, new { id = "Name", style = "width: 200px; background-color: #C0C0C0" })

Html.HiddenFor(m => m.Key, new { id="Guid"})

用户控件有一些 Jquery 语句来设置 TextBox 和 Hidden 字段的值.

The user Control has some Jquery statements which set the value of the TextBox and the Hidden field.

当我对控制器的 POST 方法执行调试时,我在 Lookup 属性中看不到任何值?!

When I do a DEBUG to the POST method of the Controller, I see no value inside the Lookup property?!

但是如果我将属性的类型更改为字符串而不是 KeyValuePair并更改用户控件的类型,我看到了一个值.

But If I changed the type of the property to string instead of KeyValuePair and also change the type of the User Control, I see a value.

我认为我很接近,但我无法弄清楚.

I think I'm very close but I can't figure it out.

推荐答案

KeyValuePair 结构没有默认的无参数构造函数,不能被模型绑定器实例化.我为您的视图推荐一个只有这些属性的自定义模型类.

The KeyValuePair structure doesn't have a default parameterless constructor and can't be instantiated by the model binder. I recommend a custom model class for your view that has just those properties.

public class CustomControlViewModel
{
    public string Key { get; set; }
    public string Value { get; set; }
}

将您的 KVP 转换为该模型类以供您查看和/或将该类用作您的操作的参数.

Transform your KVP into this model class for your view and/or use this class as the parameter on your action.

[HttpGet]
public ActionResult Lookup()
{
    return View( new CustomControlViewModel { Value = kvp.Value, Key = kvp.Key } );
}

[HttpPost]
public ActionResult Lookup( CustomControlViewModel lookup )
{
     ...
}

这篇关于ASP.NET MVC 3 将 KeyValuePair 类型的用户控件绑定到 ViewModel的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆