MVC剃须刀按钮

问题描述

| 嗨,我是MVC Razor的新手 我试图做一个带有3 Button插入,删除和更新的页面。 我的观点看起来像
        <div>    
          @using (Html.BeginForm())
           {

                <input type=\"button\" class=\"button1\" value=\"Insert\" />
                <input type=\"button\" class=\"button1\" value=\"Delete\" />
                <input type=\"button\" class=\"button1\" value=\"Update\" /> 
           }
        </div>
我的控制器就像
       public ActionResult Index()
       {
              return View();
       }
我将如何在控制器中获取这些按钮的事件,以便能够编写每个按钮的逻辑。请帮助我获取编码或任何合适的链接,这将有助于解决此问题。 谢谢 圣     

解决方法

        [编辑] 在其他答案的评论中重申我的观点:当您将LOGIC绑定到C#中的按钮的值时,您会将C#代码绑定到该语言。 想象一下,您将英文版的“保存”按钮设置为:
<input type=\"submit\" value=\"Insert\" name=\'button\' />
在代码中,您将使用以下值进行切换:
public ActionResult Index(string button)
{
    switch (button)  
    {
        case \"Insert\": ...
        case \"Update\": ...
        case \"Delete\": ...       
    }

    return View();
}
现在-用另一种语言查看该表格时-您认为会发生什么?!?! 这是威尔士html输出:
<input type=\"submit\" value=\"Mewnosod\" name=\'button\' />
和德国人:
<input type=\"submit\" value=\"Einfügen\" name=\'button\' />
那将如何运作?! 全球化不是一个单独的问题! 如果使用以下方法,您的操作将如下所示:
public ActionResult Index(string button)
{
    switch (button)  
    {
        case \"Insert\": ...
        case \"Update\": ...
        case \"Delete\": ...     
        case \"Einfügen\": ...  
        case \"Mewnosod\": ....
        .... a load of other languages for each action type - 
    }

    return View();
}
请...认真... [/编辑] 这是我的MVC操作选择器代码:Asp.Net Mvc操作选择器 本质上,您需要一个动作选择器类:
/// <summary>
/// AcceptParameterAttribute to enable submit buttons to execute specific action methods.
/// </summary>
public class AcceptParameterAttribute : ActionMethodSelectorAttribute
{
    /// <summary>
    /// Gets or sets the value to use in submit button to identify which method to select. This must be unique in each controller.
    /// </summary>
    public string Action { get; set; }
 
    /// <summary>
    /// Determines whether the action method selection is valid for the specified controller context.
    /// </summary>
    /// <param name=\"controllerContext\">The controller context.</param>
    /// <param name=\"methodInfo\">Information about the action method.</param>
    /// <returns>true if the action method selection is valid for the specified controller context; otherwise,false.</returns>
    public override bool IsValidForRequest(ControllerContext controllerContext,MethodInfo methodInfo)
    {
        if (controllerContext == null)
        {
            throw new ArgumentNullException(\"controllerContext\");
        }
 
        var req = controllerContext.RequestContext.HttpContext.Request;
 
        return req.Form.AllKeys.Contains(this.Action);
 
    }
}
可以修改按钮名称。 然后,您可以使用以下命令装饰动作:
[AcceptParameter(Action = \"Edit\")]
public ActionResult Person_Edit(PersonViewModel model){
...
}
切换动作很脏-这是一种更清洁的方法。我想也自然得多。     ,        给按钮起一个名字:
<div>    
 @using (Html.BeginForm())
 {
     <input type=\"button\" name=\"button\" class=\"button1\" value=\"Insert\" />
     <input type=\"button\" name=\"button\" class=\"button1\" value=\"Delete\" />
     <input type=\"button\" name=\"button\" class=\"button1\" value=\"Update\" /> 
 }
</div>
并在您的操作中使用它:
public ActionResult Index(string button)
{
    switch (button)  
    {
        case \"Insert\": ...
        case \"Update\": ...
        case \"Delete\": ...       
    }

    return View();
}
话虽如此,我不会使用这种方法。我会即时将表单动作修改为不同的控制器动作(使用
Url.Action
),从而将该代码与使用jQuery的单击处理程序挂钩。     ,        如果您像我一样使用本地化,这是改进的AcceptParameterAttribute
public class AcceptParameterAttribute : ActionMethodSelectorAttribute
{
    public string Name { get; set; }
    public Type ResourceType { set; get; }
    public string Value { get; set; }

    public override bool IsValidForRequest(ControllerContext controllerContext,MethodInfo methodInfo)
    {
        HttpRequestBase request = controllerContext.RequestContext.HttpContext.Request;
        if (ResourceType != null)
        {
            ResourceManager resourceManager = new ResourceManager(ResourceType);
            return request.Form[Name] == resourceManager.GetString(Value);
        }
        return request.Form[Name] == Value;
    }
}
用法类似于DisplayAttribute
[AcceptParameter(ResourceType = typeof(Resources),Name = \"submit\",Value = \"Search\")]
和按钮
<input type=\"button\" name=\"submit\" value=\"@Resources.Search\" />
    ,        我建议您阅读一些有关MVC3的简单教程-这将使您有机会了解MVC框架的基本原理。您可以从这里开始。 现在您的问题是:最好的方法是从每个按钮调用控制器中的某些动作。
@Html.ActionLink(\"Insert\",\"Insert\") 
要么
@Html.ActionLink(\"Edit\",\"Edit\",new{Id=lineId}).
然后,当用户单击此链接时,他将进入正确的视图,可以处理该任务。