html代码 怎么写有一个文本框和一个按钮 然后按钮点击后会跳转到新的网页

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了html代码 怎么写有一个文本框和一个按钮 然后按钮点击后会跳转到新的网页相关的知识,希望对你有一定的参考价值。

网页的内容是本来就写再按钮里面的链接和文本框的链接 急!

参考技术A

    将button设置一个onclick事件,点击触发JS事件跳转

    在button外设置一个链接a标签

文本框和按钮 - 绑定和命令

【中文标题】文本框和按钮 - 绑定和命令【英文标题】:TextBox and Button - Binding and Command 【发布时间】:2011-02-21 08:19:17 【问题描述】:

我正在使用 MVVM 模式。我有一个

    Text属性绑定到ViewModel的Text属性的文本框(V​​M支持INotifyProperyChange)Text属性 其命令绑定到 VM 的 ICommand 属性类型的按钮

你可能认为这是一个 SearchTextBox 和 SearchButton

我面临的问题是,当我在 SearchTextBox 中输入文本并单击 SearchButton 时,只会调用 SearchTextBox 绑定的 set 属性实现,但 SearchButton 单击的 Command 永远不会执行(注意:ICommand CanExecute handler 始终返回真)

如果我使用 TAB 键从 SearchTextBox 中跳出,或者使用鼠标将焦点从 SearchTextBox 移开,然后单击 SearchButton,则效果很好。这意味着执行两个单独的操作来分别触发这两个事件。理想情况下,单击 SearchButton 应该会导致 SearchTextBox 失去焦点,从而调用Set 属性,并且单击 Search 按钮会转换为命令执行。

代码如下

XAML:

<TextBox Text="Binding Path=SearchText,Mode=TwoWay"/>

<Button Content="Search" Width="100" Command="Binding MySearchCommand"/>

C#:

public String _SearchText;
public String SearchText

   get  return _SearchText; 
   set 
   
     _SearchText = value;
     OnPropertyChanged("SearchText"); 
    
 

ICommand 实现是标准实现,没有花哨的代码,CanExecute 处理程序总是返回 True

【问题讨论】:

CanExecute 运行时你的命令没有执行怎么办?您可以在这里发布实现吗?(您的 Execute 方法) 我认为字节的意思是 CanExecute 没有运行,但被定义为始终返回 true。 肯定有一些愚蠢的错误,请发布您的代码:) 如果问题只是您的 TextBox 仅绑定在 LostFocus 上,那么您可以在绑定中更改此行为,例如 Binding MyText, UpdateSourceTrigger=PropertyChanged Piotr - 感谢您的澄清。你的理解是正确的。让我在这里复制代码sn-p 【参考方案1】:

尝试通过编写一个重现问题的小型测试项目来隔离问题,如果可以重现,请发布代码。通常,当您在主项目之外重现问题时,问题和解决方案就会变得显而易见。

【讨论】:

【参考方案2】:

我创建了一个示例应用程序来重现此问题。

我在 SearchText - Set 属性和 MySearchCommandExecute 方法中放置了断点并添加了一个 Debug.Writeline。

设置断点后,仅调用 SearchText - Set 属性。我观察到,如果我从 SearchText - Set 属性中删除断点,那么属性和命令都会正确执行。 VS 2008 看起来有些问题,但我可能错了。

相关示例代码如下

class SearchViewModel : ViewModelBase
    
        public SearchViewModel() 
        

        

        public String _SearchText;
        public String SearchText
        
            get  return _SearchText; 
            set
            
                System.Diagnostics.Debug.WriteLine("Set Membership called");

                OnPropertyChanged("SearchText");
            
        

        #region Commands
        RelayCommand _SearchCommand;

        public ICommand SearchCommand
        
            get
            
                if (_SearchCommand == null)
                
                    _SearchCommand = new RelayCommand(param => this.MySearchCommandExecute(), param => this.MySearchCommandCanExecute);
                
                return _SearchCommand;
            
        

        public void MySearchCommandExecute()
        
            System.Diagnostics.Debug.WriteLine("MySearchCommandExecute called");

            // Do Search
        

        public bool MySearchCommandCanExecute
        
            get
            
                return true;
            
        

        #endregion
    

SearchView.xaml

<UserControl x:Class="WpfApplication2.SearchView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Height="300" Width="300">
    <StackPanel>
        <StackPanel Orientation="Vertical" HorizontalAlignment="Left" Margin="4">
            <Label Foreground="Black"  FontFamily="Calibri" Width="155" Margin="4,0,4,0" Content="SearchText"/>
            <TextBox Foreground="Black"  FontFamily="Calibri" Width="155" Margin="4,0,4,0" Text="Binding Path=SearchText"/>
        </StackPanel>
        <Button HorizontalAlignment="Left" Content="Search" Width="100" Command="Binding SearchCommand" Margin="8"/>
    </StackPanel>
</UserControl>

RelayCommand.cs

// Reference: MSDN sample
    class RelayCommand : ICommand
    
        readonly Action<object> _execute;
        readonly Predicate<object> _canExecute;

        public RelayCommand(Action<object> execute)
            : this(execute, null)
        
        

        public RelayCommand(Action<object> execute, Predicate<object> canExecute)
        
            if (execute == null)
                throw new ArgumentNullException("relaycommand execute");

            _execute = execute;
            _canExecute = canExecute;
        

        [DebuggerStepThrough]
        public bool CanExecute(object parameter)
        
            return _canExecute == null ? true : _canExecute(parameter);
        

        public event EventHandler CanExecuteChanged
        
            add  CommandManager.RequerySuggested += value; 
            remove  CommandManager.RequerySuggested -= value; 
        

        public void Execute(object parameter)
        
            _execute(parameter);
        
    

【讨论】:

【参考方案3】:

字节,

很抱歉我的回复晚了,但我希望它会变得很方便。我最近很忙,所以我无法调试你的代码(当我有更多时间时我会尝试这样做),但请尝试我粘贴在下面的示例代码(它非常适合我)。如您所见,它非常简单。我使用了你的 xaml,但是对于 Window:

public partial class MainWindow : Window

    public MainWindow()
    
        InitializeComponent();

        this.DataContext = new TempViewModel();
    


public class TempViewModel : INotifyPropertyChanged

    private String _searchText;
    private ICommand _searchCommand;

    #region Commands

    protected class Search : ICommand
    
        private TempViewModel _viewModel;

        public bool CanExecute(object parameter)
        
            return true;
        

        public event EventHandler CanExecuteChanged
        
            add  
            remove  
        

        public void Execute(object parameter)
        
            //MessageBox in VM is just for demonstration
            MessageBox.Show("command executed with search string: " + this._viewModel._searchText);
        

        public Search(TempViewModel viewModel)
        
            this._viewModel = viewModel;
        
    

    #endregion //Commands

    #region INotifyPropertyChanged

    public event PropertyChangedEventHandler PropertyChanged;

    public void OnPropertyChanged(String propertyName)
    
        if (this.PropertyChanged != null)
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    

    #endregion //INotifyPropertyChanged

    #region Public properties

    public String SearchText
    
        get
        
            return this._searchText;
        
        set
        
            this._searchText = value;
            OnPropertyChanged("SearchText");
        
    

    public ICommand SearchCommand
    
        get
        
            return this._searchCommand;
        
        set
        
            this._searchCommand = value;
            OnPropertyChanged("SearchCommand");
        
    

    #endregion //Public properties

    public TempViewModel()
    
        this.SearchCommand = new Search(this);
        this.SearchText = "Sample string";
    

如果您有任何其他问题,请随时提问。

编辑:啊,对不起,我把Command="Binding SearchCommand"改成了Command="Binding Path=SearchCommand"

【讨论】:

以上是关于html代码 怎么写有一个文本框和一个按钮 然后按钮点击后会跳转到新的网页的主要内容,如果未能解决你的问题,请参考以下文章

带有文本框和 JS 的提交按钮

用jquery 怎么给文本框赋值

html代码如何设置一个文本框和按钮,使点击按钮后跳转至新"固定值+输入文本“的网页

编写程序界面中包括一个标签、一个文本框和一个按钮。当用户单击按钮时,程序把文本框的内容复制到标签中

输出H1到H6并重复的网页上的文本框

html文本框和按钮这些点击时不显示边框的光晕。 或者淡化好看些。