我在整个网络上搜索过,但我找不到任何能够揭示正确方法的好主题。
我有一个非常简单的网站,我使用Kentico 9 CMS开发。此网站仅包含两个子页面和一个标题,用于在这些子页面之间导航。
" Home"子页面包含一个自定义表单,它与SQL表格保持连接,每次按下提交时都会填充某些数据。
另一方面,另一页,使用自定义Web部件显示存储的数据,自定义Web部件使用 BizFormItemProvider 连接到数据库,此对象用作用于绑定控件中数据的图层。
现在是我的观点。如果你看到,有一个按钮来编辑"编辑"某一行,我的意图是重定向到" Home" (包含表单)并通过QueryString发送尝试编辑的行的ID。
我无法理解如何使用ID 重新填写表单及其数据。
也许是因为我之前从未使用过CMS,我正在寻找纯ASP.NET等开发,但它可能不是正确的。
答案 0 :(得分:2)
鉴于您的解决方案使用自定义表单来输入数据,以及用于列出存储数据的自定义Web部件,您需要使用自定义处理数据编辑的解决方案。
在主页的自定义webpart中,在加载事件中,您可以检索表单数据并在表单控件上设置值。
protected void Page_Load(object sender, EventArgs e)
{
// Ensure that the form is not being posted back,
// to prevent entered data from being overwritten
if(!IsPostBack)
{
// Get the form item ID from the query string
var personId = QueryHelper.GetInteger("personId", 0);
if(personId > 0)
{
// Get the biz form item, and set form control values
var bizFormItem = BizFormItemProvider.GetItem(personId, "customFormClassName");
txtFirstName.Text = bizFormItem.GetStringValue("FirstName", string.Empty);
}
}
}
同样,当点击提交时,您可以使用新数据更新现有表单项
protected void btnSubmit_OnClick(object sender, EventArgs e)
{
// Get the form item ID from the query string
var personId = QueryHelper.GetInteger("personId", 0);
if(personId > 0)
{
// Retrieve the existing biz form item,
// and update it from the form control values
var bizFormItem = BizFormItemProvider.GetItem(personId, "customFormClassName");
bizFormItem.SetValue("FirstName", txtFirstName.Text);
bizFormItem.Update();
}
else
{
// Your code for inserting a new form item...
}
}
您应该考虑使用Kentico表单引擎来完成此任务。不使用自定义表单输入数据,而是使用内置的在线表单 webpart。
要完成任务,您可以customise the On-line form webpart支持加载现有数据。
在bizform.ascx.cs
文件中,将代码添加到SetupControl
方法:
protected void SetupControl()
{
if (StopProcessing)
{
// Existing code...
}
else
{
// Existing code...
// Get the form item ID from the query string
var personId = QueryHelper.GetInteger("personId", 0);
if(personId > 0)
{
// Get the biz form item, and set form control values
var bizFormItem = BizFormItemProvider.GetItem(personId, "customFormClassName");
if(bizFormItem != null)
{
// Set the item ID
viewBiz.ItemID = bizFormItem.ItemID;
}
}
}
}
一旦设置了ItemID
属性,这将自动将表单切换为编辑模式,而不是插入模式。单击“提交”按钮将保存对现有表单项的更改。
您无需担心代码中的验证,插入数据仍然有效。
答案 1 :(得分:1)
这是您在表单应用程序中使用的Kenticos的联系表单,还是自定义表单?如果是自定义表单,您可以使用包含ID的链接创建转换。如果是商业表格,您仍然可以在页面类型中创建转换(创建新的页面类型并选择“页面类型只是一个没有自定义字段的容器”),然后写一个custom query来获取商业表单数据,并使用转发器显示该转换的数据。