未填写表单

时间:2017-02-24 11:48:39

标签: c# asp.net-mvc

这是我的实体类:

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类在

中是相同的

4 个答案:

答案 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

查看正在运行的.NET Fiddle演示

答案 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