GVKun编程网logo

向Zend Forms添加一些html(添加form2)

8

在这篇文章中,我们将为您详细介绍向ZendForms添加一些html的内容,并且讨论关于添加form2的相关问题。此外,我们还会涉及一些关于asp.net–如何Html.Encode在Webforms

在这篇文章中,我们将为您详细介绍向Zend Forms添加一些html的内容,并且讨论关于添加form2的相关问题。此外,我们还会涉及一些关于asp.net – 如何Html.Encode在Webforms、asp.net – 如何在WebForms中的form.onSubmit期间调用HTML5 form.checkValidity?、asp.net-mvc – 将HTML属性添加到Html.BeginForm()的变体、asp.net-mvc-3 – 如何在MVC3 / 4中的Html.BeginForm()中添加一个类属性,保留最小重载的知识,以帮助您更全面地了解这个主题。

本文目录一览:

向Zend Forms添加一些html(添加form2)

向Zend Forms添加一些html(添加form2)

我正在寻找简单的代码,让我将以下html添加到我的zend表单中:

<div id="wmd-button-bar"></div>

就是这样,它必须位于表单中我的“ method”元素上方,但仅此而已。对于这样一个简单的动作,我找不到任何不涉及我学习火箭科学的方法(即Zend
Decorators)。

答案1

小编典典

目前,我唯一想到的方法是向表单中添加一个虚拟元素,并删除所有带有除您在问题中指定的属性的“
HtmlTag”以外的装饰器。删除装饰器意味着不会渲染实际的元素-仅会渲染HtmlTag装饰器。

因此,假设您的表单是$ form:

$form->addElement(    ''hidden'',    ''dummy'',    array(        ''required'' => false,        ''ignore'' => true,        ''autoInsertNotEmptyValidator'' => false,        ''decorators'' => array(            array(                ''HtmlTag'', array(                    ''tag''  => ''div'',                    ''id''   => ''wmd-button-bar'',                    ''class'' => ''wmd-panel''                )            )        )    ));$form->dummy->clearValidators();

请注意,您要防止对该元素进行任何验证。这只是一种方法-可能还有其他方法。

输出:

<div id="wmd-button-bar"></div>

有一篇很好的文章描述了装饰器。

asp.net – 如何Html.Encode在Webforms

asp.net – 如何Html.Encode在Webforms

我有一个ASP.NET Web窗体应用程序.有一个带有TextBox的页面,用户可以在这些页面中输入用于查询数据库的搜索项.

我知道我需要防止JavaScript注入攻击.我该怎么做?

在MVC中,我将使用Html.Encode.它在Web窗体中似乎不被识别.

谢谢!

解决方法

您可以使用 HttpUtility.HtmlEncode

asp.net – 如何在WebForms中的form.onSubmit期间调用HTML5 form.checkValidity?

asp.net – 如何在WebForms中的form.onSubmit期间调用HTML5 form.checkValidity?

我如何覆盖或扩展标准的WebForms WebForm_OnSubmit javascript函数?

我在ASP.net WebForms网站上使用HTML5输入类型.用户代理(例如Chrome,IE,Firefox)已正确处理数据清理,备用UI等.

通常,当用户点击< input type =“submit”>按钮,User-Agent将暂停提交,并显示UI以向用户指示他们的输入将无效:

WebForms的问题在于它不使用“提交”按钮.相反,一切都可以通过javascript回发来完成,而不是提交表单:

<asp:LinkButton ID="bbOK" Text="Save User" runat="server" OnClick="bbOK_Click"></asp:LinkButton>

当渲染到客户端html时,它变成对Javascript的调用:

WebForm_DoPostBackWithOptions(...)

真正的长形式是Anchor标签:

<a id="Really_Long_Thing_ctl00_bbOK" 
   href='javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$MainContent$VistaToolbar$ctl00$bbOK","",true,false,true))'>
   Save User
</a>

这意味着用户代理从不向用户提示输入的元素无效.

即使表单未被“提交”,它仍会触发onsubmit事件.我可以使用以下方法手动触发HTML5表单验证:

isValid = form.checkValidity();

理想情况下,我会在我的ASP.web WebForms站点中挂钩该事件:

的Site.Master

<form runat="server" onsubmit="return CheckFormValidation(this)">

<script type="text/javascript">
   function CheckFormValidation(sender) 
   {
      //Is the html5 form validation method supported?
      if (sender.checkValidity)
         return sender.checkValidity();

      //If the form doesn't support validation,then we just assume true
      return true;
   }
</script>

除了WebForms基础结构删除我的onsubmit方法处理程序,并将其替换为自己的:

<form id="ctl01" onsubmit="javascript:return WebForm_OnSubmit();" action="UserProperties.aspx?userGuid=00112233-5544-4666-7777-8899aabbccdd" method="post">

所以我自己的提交电话被忽略了.看来,深入研究WebForm_OnSubmit会导致ASP.net WebForms验证基础架构陷入困境:

function WebForm_OnSubmit() 
{
   if (typeof(ValidatorOnSubmit) == "function" && ValidatorOnSubmit() == false) 
      return false;
   return true;
}

调用函数:

var Page_ValidationActive = false;
function ValidatorOnSubmit() 
{
    if (Page_ValidationActive) {
        return ValidatorCommonOnSubmit();
    }
    else 
    {
        return true;
    }
}

哪些调用,哪些调用,哪些检查.

只想要使用WebForms进行HTML5表单验证

问题是WebForms在提交之前有一个巨大的基础设施来检查表单,并通过标准化机制(以及我不使用的整个基础架构)向用户显示错误.它接管表单的onsubmit事件,并且它(不一定)使用< input type =“submit”>进行中.

我该怎么做才能说服ASP.net WebForms网站让User-Agent验证表单?

也可以看看

> HTML5 validation and ASP.net Webforms
> How do I get Client-side validation of ASP.Net page to run?
> Trigger standard HTML5 validation (form) without using submit button?
> MSDN Magazine: Better Web Forms with HTML5 Forms

解决方法

Web表单基础结构删除处理程序,因为您尝试将其直接添加到可视设计环境中的元素上,而Web表单不是以这种方式工作的.

捕获提交处理程序很简单,您只需要创造性地思考一下.

每当您尝试在Web表单环境中处理类似这样的事情时,您必须学会考虑Web表单页面呈现管道之后的解决方案.如果您尝试找到直接在Web表单引擎中工作的解决方案,那么Web表单将每次都获胜.

如果需要,您可以在此处重现我的确切测试用例,或者您可以根据需要选择所需的位并重新使用.

步骤1

在C#中创建一个新的Web表单项目(如果需要,可以在VB中执行,但我将我的示例设置为C#),一旦创建了项目,右键单击应用程序引用,进入NuGet并安装JQuery的.

使用JQuery可以做到这一点,只使用本机方法,但它是星期天,我今天很懒:-)

第2步

在项目中添加一个新的Web表单(使用添加新项目)并调用此“Default.aspx”,在此表单上添加一些文本,一个文本框,一个按钮和一个标签.

您的代码应类似于:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="jsvalidation.Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  <title></title>
</head>
<body>
  <form id="form1" runat="server">
  <div>
    Please enter your name :
    <asp:TextBox ID="txtName" runat="server" data-jsname="username"></asp:TextBox>
    <asp:Button ID="btnSubmit" runat="server" OnClick="btnSubmit_Click" Text="Submit"     />
  </div>
  <asp:Label runat="server" ID="lblResult">...</asp:Label>
  </form>

</body>
</html>

然后按F7(或双击按钮)转到表单编辑器后面的代码.

第3步

将按钮处理程序的代码添加到后面的代码中.如果您的处理方式与我完全相同,则代码应与以下内容类似:

using System;

namespace jsvalidation
{
  public partial class Default : System.Web.UI.Page
  {
    protected void Page_Load(object sender,EventArgs e)
    {}

    protected void btnSubmit_Click(object sender,EventArgs e)
    {
      if(Page.IsPostBack)
      {
        lblResult.Text = "Well hello there " + txtName.Text;
      }
    }
  }
}

此时,您可以按F5测试工作,当您按下提交按钮时,在文本框中输入(或不输入)的内容应与下面标签中的消息一起显示.

现在我们已经设置了基本的网络表单,我们只需要拦截表单提交.

第4步

正如我刚才所说,你需要在网络表格框之外思考.

这意味着您需要在页面呈现并发送到浏览器之后运行拦截.

Web表单注入混合的所有JS通常在允许页面输出继续之前执行,这意味着在打开正文标记之前.

为了使代码在它之后运行,您需要将脚本放在html输出的END处,以便它最后运行.

在结束正文标记之前添加以下代码,但在结束表单标记之后添加

<script src="/Scripts/jquery-2.1.1.js"></script>
<script type="text/javascript">

  $(document).ready(function() {

    $('form').submit(function() {

      var uninput = $('input[data-jsname="username"]');
      var username = uninput.val();

      if (username == "")
      {
        alert("Please supply a username!");
        return false;
      }

    });

  });

</script>

你们中间越精明,我会立即注意到我没有调用HTML5验证API,原因是我试图让这个例子变得简单.

我在哪里检查用户名值是重要的部分.

重要的是我执行检查的匿名函数返回true或false. (如果你不返回任何东西,则为True)

如果您返回false,则会阻止回发,从而允许您使用所需的任何JS代码来使用HTML5验证API更改表单域.

我个人的偏好是使用bootstrap(参见我的Bootstrap 2书的免费电子书范围,很快就会发布Bootstrap 3书),你可以在框架中使用特殊的标记和css类,例如“has-errors” “适当地调整颜色.

至于使用JQuery选择组件,这里有两件事你需要注意.

> 1)你不应该在网页表单页面上有多个表单,事实上如果我没记错,你的应用程序将无法编译,如果你这样做,或者最多它肯定会在运行时抛出异常.
> 2)因为你只有一个表格,然后你可以非常安全地做出假设,JQuery中的通用“形式”选择器只会选择你的主要形式(不论其ID,名称,缺乏或大小)并且为它添加​​一个onsubmit处理程序,在web-forms之后总是会附加它.
> 3)因为Web表单可以(并且通常会)修改ID名称,所以通常更容易使用“数据属性”向标记添加自定义位.实际的ASP.NET js端验证本身就是完全相同的技巧,以允许JS代码和.NET代码在同一页面中愉快地共存.有办法告诉.NET如何命名ID,但通常你必须在很多地方设置很多选项,而且很容易错过一个.使用“数据属性”和JQ属性选择器语法是一种更安全,更易于管理的方法来实现相同的功能.

摘要

这不是一项艰巨的任务,但我不得不承认,如果你不在网络形式围绕着你的范围内寻找,那么这不是一个明显的问题.

Web表单专为快速应用程序开发而设计,主要用于桌面win-forms模型的开发人员.虽然现在网页形式仍然存在,但对于新的绿地应用程序,我建议也考虑其他选项,特别是那些建立在新HTML5规范正在努力铺设和正确的基础之上的应用程序.

asp.net-mvc – 将HTML属性添加到Html.BeginForm()的变体

asp.net-mvc – 将HTML属性添加到Html.BeginForm()的变体

我需要一个ASP.NET MVC Razor页面上的表单.我的偏好是使用以下语法:

@using (Html.BeginForm())
{
}

但是,我需要在表单中添加几个属性.所以我最终得到了以下内容:

@using (Html.BeginForm(null,null,FormMethod.Post,new { name = "value" }))
{
}

然而,这具有不希望的副作用.如果此页面的请求中存在查询参数,则第一个表单会在提交表单时传递它们.但是,第二个版本没有.

我真的不知道为什么BeginForm()不支持属性,但有没有一种直接的方法来向BeginForm()添加属性,并在提交for时仍传递任何查询参数?

编辑:

在研究之后,似乎最好的解决方案是这样的:

<form action="@Request.RawUrl" method="post" name="value">
</form>

但是,使用此语法时,将禁用客户端验证.在没有更复杂和可能不可靠的结构的情况下,似乎没有很好的解决方案.

解决方法

确实如此,但我会使用自定义帮助程序来保留用于客户端验证的表单上下文:

public static class FormExtensions
{
    private static object _lastFormNumKey = new object();

    public static Idisposable BeginForm(this HtmlHelper htmlHelper,object htmlAttributes)
    {
        string rawUrl = htmlHelper.ViewContext.HttpContext.Request.RawUrl;
        return htmlHelper.FormHelper(rawUrl,HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes));
    }

    private static int IncrementFormCount(IDictionary items)
    {
        object obj2 = items[_lastFormNumKey];
        int num = (obj2 != null) ? (((int)obj2) + 1) : 0;
        items[_lastFormNumKey] = num;
        return num;
    }

    private static string DefaultFormIdGenerator(this HtmlHelper htmlhelper)
    {
        int num = IncrementFormCount(htmlhelper.ViewContext.HttpContext.Items);
        return string.Format(CultureInfo.InvariantCulture,"form{0}",new object[] { num });
    }

    private static Idisposable FormHelper(this HtmlHelper htmlHelper,string formAction,FormMethod method,IDictionary<string,object> htmlAttributes)
    {
        var builder = new TagBuilder("form");
        builder.MergeAttributes<string,object>(htmlAttributes);
        builder.MergeAttribute("action",formAction);
        builder.MergeAttribute("method",HtmlHelper.GetFormMethodString(method),true);
        bool flag = htmlHelper.ViewContext.ClientValidationEnabled && !htmlHelper.ViewContext.UnobtrusiveJavaScriptEnabled;
        if (flag)
        {
            builder.GenerateId(htmlHelper.DefaultFormIdGenerator());
        }
        htmlHelper.ViewContext.Writer.Write(builder.ToString(TagRenderMode.StartTag));
        var form = new MvcForm(htmlHelper.ViewContext);
        if (flag)
        {
            htmlHelper.ViewContext.FormContext.FormId = builder.Attributes["id"];
        }
        return form;
    }
}

可以像这样使用:

@using (Html.BeginForm(htmlAttributes: new { name = "value" }))
{
    ...
}

asp.net-mvc-3 – 如何在MVC3 / 4中的Html.BeginForm()中添加一个类属性,保留最小重载

asp.net-mvc-3 – 如何在MVC3 / 4中的Html.BeginForm()中添加一个类属性,保留最小重载

我正在升级我的应用程序到Bootstrap 2.1.1,我需要添加一个类属性(class =“form-horizo​​ntal”)到许多表单标签.问题是,大多数形式使用相当漂亮
@using (Html.BeginForm()) {

我宁愿保留的格式.获取类属性的明显方法是使用以下重载,例如:

@using (Html.BeginForm("Register","Account",FormMethod.Post,new { @})) {

但我宁愿不这样做.在我的表单中添加类属性的最佳方式是什么?

我已经考虑过使用一个jQuery文档就绪处理程序.addClass(“form-horizo​​ntal”)来形成,但是我担心用户会看到可怕的“无内容闪存”.

另一种方法可能是使用较少风格的混合,将.form-horizo​​ntal类添加到所有表单样式规则,但是我还没有使用,所以我不确定这一点.

任何人都知道解决这个问题的最好办法?

解决方法

编写一个调用过载所需的自定义助手方法,传递“form-horizo​​ntal”?

然后,您的意见将使用@using(Html.BootstrapBeginForm()){,让您的观点很好整洁.

关于向Zend Forms添加一些html添加form2的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于asp.net – 如何Html.Encode在Webforms、asp.net – 如何在WebForms中的form.onSubmit期间调用HTML5 form.checkValidity?、asp.net-mvc – 将HTML属性添加到Html.BeginForm()的变体、asp.net-mvc-3 – 如何在MVC3 / 4中的Html.BeginForm()中添加一个类属性,保留最小重载等相关知识的信息别忘了在本站进行查找喔。

本文标签: