2

跟进我最初的问题

如果我这样在代码中创建一个表单:

public void Describe(DescribeContext context) {
    Func<IShapeFactory, object> form =
        shape => {

            var f = Shape.Form(
                Id: "MyLayoutBasicInformation",
                _BasicInformation: Shape.Fieldset(
                    Title: T("Basic Information"),

                    _FirstName: Shape.TextBox(
                        Id: "FirstName", Name: "First Name",
                        Title: T("First Name"),
                        Description: T("The name for this field")
                        )
                    )
                );
            return f;
        };
    context.Form("MyLayoutBasicInformation", form);
}

并因此将其注入前端视图(如提供的答案):

var shape = _formManager.Build("MyLayoutBasicInformation");

我的显示器只显示字段名。但是没有将其保存到数据库的按钮。关于如何做到这一点的任何想法?

更新:我正在使用我自己的自定义模块。我确实应用了一个自定义主题。ShapeTracing 给了我替代品来放置在主题中——我不知道我想这样做。

我因此将构建代码放在我的控制器中:

[Themed]
    public ActionResult BasicInformation()
    {
        var basicInformation = _formManager.Build("MyLayoutBasicInformation");
        return new ShapeResult(this, basicInformation);
    }

最初,我使用 HTML 帮助程序对字段进行硬编码。因此,如果我的控制器是 MyController,我会看到这样的视图:~/Views/My/BasicInformation.cshtml。该文件仍然存在于模块中,但现在被构建代码覆盖。

我怀疑我必须玩弄它。

更新:我设法在函数中执行此操作以显示按钮,只需要弄清楚如何连接它。

_NextButton: Shape.Button(
Id: "NextButton", Name: "Next",
Title: T("Next")
    )

但这只是显示一个没有文本的按钮。

4

1 回答 1

1

默认情况下,不会为以这种方式构建的任何表单生成提交按钮。将提交按钮添加到您的表单更改您的代码如下:

public void Describe(DescribeContext context) {
    Func<IShapeFactory, object> form =
        shape => {

            var f = Shape.Form(
                Id: "MyLayoutBasicInformation",
                _BasicInformation: Shape.Fieldset(
                    Title: T("Basic Information"),

                    _FirstName: Shape.TextBox(
                        Id: "FirstName", Name: "First Name",
                        Title: T("First Name"),
                        Description: T("The name for this field")
                        )
                    ),
                    _Submit:Shape.Submit(Value:"Save") 
                );
            return f;
        };
    context.Form("MyLayoutBasicInformation", form);
}
于 2013-06-28T20:14:23.383 回答