GVKun编程网logo

asp.net – 使用HTML’readonly =“readonly”’与JavaScript’元素的奇怪行为.readOnly = true;’

15

如果您想了解asp.net–使用HTML’readonly=“readonly”’与JavaScript’元素的奇怪行为.readOnly=true;’的知识,那么本篇文章将是您的不二之选。同时我们将

如果您想了解asp.net – 使用HTML’readonly =“readonly”’与JavaScript’元素的奇怪行为.readOnly = true;’的知识,那么本篇文章将是您的不二之选。同时我们将深入剖析#javascript# window.onload 和 $(document).ready()、asp.net-mvc – ReadOnly(true)是否与Html.EditorForModel一起使用?、ASP.NET中readonly与const的区别详解、ASP.NET中TextBox控件设立ReadOnly="true"后台取不到值的各个方面,并给出实际的案例分析,希望能帮助到您!

本文目录一览:

asp.net – 使用HTML’readonly =“readonly”’与JavaScript’元素的奇怪行为.readOnly = true;’

asp.net – 使用HTML’readonly =“readonly”’与JavaScript’元素的奇怪行为.readOnly = true;’

一些背景

所以我在Web应用程序中完成了一些增强功能,可以自动插入数据.用户填写了一些文本框,其中的其他文本框具有自动计算的值.接收自动计算值的文本框必须是readOnly以防止用户更改,但不能禁用或不会在回发时提交.这些文本框中的每一个旁边都有一个复选框,因此用户可以有意识地检查它以使字段可写,从而允许它们覆盖插值.

浏览器:IE 7(不确定这在其他人中的行为)

问题

使用JavaScript设置文本框的readOnly属性时,文本框中的值将以以下形式提交:我可以在服务器端(ASP.NET)使用myTextBox.Text查看它,它位于Request.Form(“myTextBox”)中.

如果我在我的< asp:TextBox />上设置ReadOnly =“true”在不使用JavaScript方法的情况下,文本框中的值不能从myTextBox.Text中获取(我假设它从未进入ViewState),但它是以表格形式提交的:Request.Form(“myTextBox” “)有一个价值.

我的问题

到底他妈发生了什么?这是设计的吗?这是一个浏览器问题吗?我找到了一个bug吗?令人讨厌的是,我必须有一些额外的JavaScript,以便在页面加载时最初禁用文本框的可写性,以使我的应用程序正常工作.

谢谢!

解决方法

这是设计的.作为ASP.NET安全功能,无论客户端发生什么,在服务器上将其设置为只读即可使其保持只读状态.如果您希望它们能够覆盖它并实际提交一个值,那么它在服务器上并不是真正的只读,只是在客户端上有条件地.您可以在选中复选框以更改服务器上的readonly属性时进行回发,也可以使用此ASP.NET代码仅在客户端上设置readonly属性:
MyControl.Attributes.Add("readOnly","readOnly")

#javascript# window.onload 和 $(document).ready()

#javascript# window.onload 和 $(document).ready()

window.onload

当浏览器中所有的资源内容(DOM结构、文本内容、图片...)都加载完成,触发load事件。

  1. 它是基于DOM0事件绑定完成的。所以在同一个页面中只能给它绑定一个方法(绑定多个将以最后一个绑定的为主)
  2. 如果想在一个页面中使用多次,我们应该是基于DOM2事件绑定。
function fn1(){
//第一件事
}
function fn2(){
//第二件事
}
window.addEventListener(''load'',fn1,false);
window.addEventListener(''load'',fn2,false);

$(document).ready()

$(function(){}) 或者 $(document).ready(function(){})

  1. 当文档中的DOM结构加载完成就会被触发执行,而且在同一个页面中可以使用多次。
  2. JQ中提供的方法,JQ是基于DOMContentLoaded这个事件完成这个操作的
  3. JQ中的事件绑定都是基于DOM2事件绑定完成的
  4. 但是DOMContentLoaded在IE6~8下使用
    attachEvent也是不支持的,JQ在IE6~8中使用的是readystatechange事件处理的。

asp.net-mvc – ReadOnly(true)是否与Html.EditorForModel一起使用?

asp.net-mvc – ReadOnly(true)是否与Html.EditorForModel一起使用?

请考虑以下设置:

模型:

public class Product
{
    [ReadOnly(true)]
    public int ProductID
    {
        get;
        set;
    }

    public string Name
    {
        get;
        set;
    }
}

视图:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" 
Inherits="System.Web.Mvc.ViewPage<MvcApplication4.Models.Product>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Home Page
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <%= Html.EditorForModel() %>
</asp:Content>

控制器:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View(new Product
            {
                ProductID = 1,Name = "Banana"
            });
    }
}

结果如下:

我期望通过ReadOnly(true)属性不能编辑ProductID属性.这支持吗?如果没有,有没有办法提示ASP.NET MVC我的模型的某些属性是只读的?我不想通过[ScaffoldColumn(false)]隐藏ProductID.

解决方法

ReadOnly和required属性将由元数据提供程序使用,但不会被使用.如果你想用EditorForModel去掉输入,你需要一个自定义模板,或者[ScaffoldColumn(false)].

对于自定义模板〜/ Views / Home / EditorTemplates / Product.ascx:

<%@ Control Language="C#" Inherits="ViewUserControl<Product>" %>

<%: Html.LabelFor(x => x.ProductID) %>
<%: Html.TextBoxFor(x => x.ProductID,new { @readonly = "readonly" }) %>

<%: Html.LabelFor(x => x.Name) %>
<%: Html.TextBoxFor(x => x.Name) %>

另请注意,默认模型绑定程序不会使用[ReadOnly(false)]将值复制到属性中.此属性不会影响默认模板呈现的UI.

ASP.NET中readonly与const的区别详解

ASP.NET中readonly与const的区别详解

const是一个修饰常量的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性,它在程序设计中有着非常重要的作用,给开发人员带来非常方便的应用。
下面我们来建一个控制台应用程序作测试

public class Test
{
  public readonly string name = "George";
  public const string coname = "ABC Company LLC";
  public Test(string name)
  {
    // readonly 修饰的变量能且只能在 Constructor(构造函数)中被改变  
    this.name = name;
  }
  public string _name
  {
    get
    {
      return name;
    }
    //不可以对readonly修饰的变量进行Set操作  
    //set    
    //{    
    //  name = value; 
    //}   
  }
}
  
class Program
{
  static void Main(string[] args)
  {
    Test obj = new Test("Test");
    //readonly的变量不可以修改值,只能在 Constructor(构造函数)中被改变    
    //obj.name = "New Value";     
    Console.WriteLine(obj.name);   
    //const 的变量直接通过对象访问,不需要实例化 
    Console.WriteLine(Test.coname);
    Console.Read();
  }
}

以前一直以为 readonly 与 const 的作用是一样的,现在明白它们之间的区别了,不知道您是否也明白了呢?希望大家有所收获吧!

您可能感兴趣的文章:
  • 深入探讨C#中的const、readonly关键字
  • C#基础知识系列八const和readonly关键字详细介绍
  • c#.net中const和readonly的区别
  • C#中 const 和 readonly 的不同
  • C#中const 和 readonly 修饰符的用法详解

ASP.NET中TextBox控件设立ReadOnly=

ASP.NET中TextBox控件设立ReadOnly="true"后台取不到值

SP.NET中TextBox控件设置ReadOnly="true"H或Enabled=false后台取不到值 当TextBox设置了ReadOnly="true" 后,要是在前台为控件添加了值,后台是取不到的,值为“空”  。    方法一:不设置ReadOnly属性,通过οnfοcus=this.blur()来模拟,如下: <asp:TextBox ID="TextBox1" runat="server" οnfοcus=this.blur()></asp:TextBox>    方法二:设置了ReadOnly属性后,通过Request来取值,如下: 前台代码: <asp:TextBox ID="TextBox1" runat="server" ReadOnly="True" ></asp:TextBox>  后台代码: string Text = Request.Form["TextBox1"].Trim();    方法三:在Page_Load()正设置文本框的只读属性,在前台不设置。就能正常读取,如下: protected void Page_Load(object sender,EventArgs e)    {        if (!Page.IsPostBack)        {            TextBox1.Attributes.Add("readonly","true");        }    }

今天关于asp.net – 使用HTML’readonly =“readonly”’与JavaScript’元素的奇怪行为.readOnly = true;’的讲解已经结束,谢谢您的阅读,如果想了解更多关于#javascript# window.onload 和 $(document).ready()、asp.net-mvc – ReadOnly(true)是否与Html.EditorForModel一起使用?、ASP.NET中readonly与const的区别详解、ASP.NET中TextBox控件设立ReadOnly="true"后台取不到值的相关知识,请在本站搜索。

本文标签: