这是我的实体类:
class Locker
{
public string FrontColor { get; set; }
}
查看:
@using (Html.BeginForm("ConfigureFurniture", "Home", FormMethod.Post))
{
<input type="color" name="FrontColor" id="color1"/>
<input type="submit" class="btn btn-success" value="Zamów" />
}
在POST操作中,未填充模型上的属性。
public ActionResult ConfigureFurniture()
{
var furnitureViewModel = _furnitureService.GetFurnitureViewModel();
return View(furnitureViewModel);
}
[HttpPost]
public ActionResult ConfigureFurniture(FurnitureViewModel furnitureViewModel)
{
return View("Index");
}
FurnitureViewModel和Locker类在
中是相同的答案 0 :(得分:1)
选定的FrontColor
最有可能以值"#00ff00"
或类似值的字符串形式发送,但您可以确认在浏览器调试程序中检查发布事件标题的确切值。
您可以将类型更改为字符串。
class Data{
public string SelectedColor { get; set; }
}
重命名输入
<input type="color" name="SelectedColor" id="color1"/>
然后,您可以向data
类添加支持属性或方法,以根据十六进制字符串返回颜色类型
假设您获得的字符串是十六进制值,例如#ffffff
,您可以使用System.Drawing.ColorTranslator.FromHtml
class Data{
public string SelectedColor { get; set; }
public Color FrontColor() {
return System.Drawing.ColorTranslator.FromHtml(SelectedColor);
}
}
您可以使用ColorTranslator.FromHtml
here
答案 1 :(得分:0)
您正在发布数据的控制器操作需要一个在C#中定义的类型Color
的值。我不知道那种类型是你创建的还是System.Drawing.Color
无论如何,问题是你的输入<input type="color" ...
没有创建C#所需类型的值,所以数据以null
的形式出现。
答案 2 :(得分:0)
您可以像这样设置Color类属性;
@Html.TextBoxFor(model => model.Color.xx, new { @class = "form-control" })
@Html.TextBoxFor(model => model.Color.yy, new { @class = "form-control" })
答案 3 :(得分:0)
您发布的唯一课程是Locker
,其中包含您尝试设置的属性FrontColor
。但是,您的操作需要FurnitureViewModel
,即您未在问题中包含的代码。但是,基于此,我可以猜出这个问题。很可能你有类似的东西:
public class FurnitureViewModel
{
...
public Locker Locker { get; set; }
}
这意味着,为了让模型绑定器绑定值,需要将其发布为Locker.FrontColor
,不仅发布FrontColor
:
<input type="color" name="Locker.FrontColor" id="color1" />
或者,更好的是,只需使用帮助者,因为他们会为您生成正确的名称:
@Html.TextBoxFor(m => m.Locker.FrontColor, new { type = "color" })
此外,您需要将FrontColor
标记为string
。正如@Fran正确指出的那样,您无法直接绑定到Color
。