从.Net (mvc)视图按钮调用控制器方法的最简单方法

3
我刚开始学习MVC编程,想请教一下如何从视图中调用控制器的方法最佳方式。 为了更容易理解: 我有一个名为Song的模型,其中包含2个方法来启动和停止它:
public class Song
{
        WMPLib.WindowsMediaPlayer wplayer ;

        public Song() {
            wplayer = new WMPLib.WindowsMediaPlayer();
            wplayer.URL = "my song url";
            wplayer.controls.stop();
        }
        public void Stop() {
            wplayer.controls.stop();
        }
        public void Start() {
            wplayer.controls.play();
        }
    }

在控制器中,我创建了歌曲对象,并有两个函数来启动和停止它。

public class DefaultController : Controller
        {
            // GET: Default
            Song c = new Song();

            public ActionResult Index()
            {
                return View(c);
            }
            public void Start() {
                c.Start();            
            }
            public void Stop() {
                c.Stop();
            }
        }

在视图中,我有两个按钮与每个控制器动作对应。
<button type="button">Start</button>
<button type="button">Stop</button>

我应如何以最正确的方式从视图按钮调用每个控制器动作?

非常感谢您的关注,我很感激您的帮助。


1
Start()Stop() 将是你通过 AJAX 调用的控制器动作。同时请记得每个请求都会创建一个新的控制器实例,因此在执行完动作后,Song 实例也将丢失。 - Jasen
2个回答

10

您可以使用href路径设置来从view中调用您的controller

<a class="btn btn-success" href="@Url.Action("Start", "DefaultController")">Start</a>

如果想传递参数,则需要:

<a class="btn btn-success" href="@Url.Action("Start","DefaultController", new {id=Item.id })">Start</a>

或者您可以检查此链接以获取其他选项。

您也可以使用ajax调用控制器方法,请参阅此链接


2
使用Razor可以非常简单地实现这一点,如下所示:
<button type="button" onclick="location.href='@Url.Action("Start", "DefaultController")'">Start</button> 

  <button type="button" onclick="location.href='@Url.Action("Stop", "DefaultController")'">Stop</button>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接