调用一个控制器通过视图按钮动作,而重定向到任何看法 [英] Invoking a controller's action by button in View without redirecting to any view

查看:238
本文介绍了调用一个控制器通过视图按钮动作,而重定向到任何看法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想添加一个按钮,我的ASP .NET MVC的WebApplication的观点,这将调用一个方法:

 公共无效UpdateDatabase(INT PERSONID,诠释surveyId){
          //更新,修改数据库
        }
 

但除此之外,什么都不会发生这样用户将不会看到任何明显的变化。用户将不被重定向,该站点将不会改变可见的内容,页面不会被重新加载。

就像你点击,没有与之关联的监听器的按钮。

我已经试过

 < P> @ Html.ActionLink(更新数据库,UpdateDatabase,新{PERSONID = Model.Item1.Id,surveyId = survey.Id},{新@class =BTN BTN-默认})< / P>
 

但我重定向到网站:

 的http://本地主机:17697 /人/ SubmitSurvey PERSONID = 6&安培; surveyId = 6
 

里面是空的。

我想只有实现调用 UpdateDatabase 方法。

编辑:

EDIT2:

的看法是这样的:

  @using WebApplication2.Models
@model System.Tuple<人名单,其中,勘察GT;>

<小时/>
< H1>调查< / H1>

<输入类型=按钮ID =科尔值=崩溃的onclick =JavaScript的:CollapseDiv()/>
@ *&其中p为H.;
        调查数量:@ Html.DisplayFor(X => Model.Item2.Count)
    < / P> * @

@ {INT I = 1;}
@foreach(在Model.Item2 VAR调查){
    使用(Html.BeginForm()){
        &其中; H2>调查@(ⅰ)所述; / H2>
        &所述; P />
        @ Html.EditorFor(X => survey.Questions)
        &其中p为H.; @ Html.ActionLink(提交,SubmitSurvey,新{PERSONID = Model.Item1.Id,surveyId = survey.Id},{新@class =BTN BTN-默认})< / P>
        <按钮的ID ='myButton的'>点击我和LT; /按钮>
        <脚本>
            $('#为myButton)。点击(函数(){
                $。员额(人/ SubmitSurvey,{PERSONID:{@Model.Item1.Id},surveyId:{@survey.Id}},功能(数据){
                    警报('更新');
                });
            });
        < / SCRIPT>
    }
    我++;
    <小时风格=背景颜色:RGB(126,126,126);身高:5像素/>
}
<小时/>
 

和控制器的动作:

PersonController:

 公共无效SubmitSurvey(INT PERSONID,诠释surveyId){
            System.Diagnostics.Debug.WriteLine(文本);
        }
 

,点击按钮后的结果:

修改3

我的 RouteConfig

 使用系统;
使用System.Collections.Generic;
使用System.Linq的;
使用的System.Web;
使用System.Web.Mvc;
使用System.Web.Routing;

命名空间WebApplication2 {
    公共类RouteConfig {
        公共静态无效的RegisterRoutes(RouteCollection路由){
            routes.IgnoreRoute({}资源个.axd / {* PATHINFO});

            routes.MapRoute(
                名称:默认,
                网址:{控制器} / {行动} / {ID},
                默认:新{控制器=主页,行动=索引,ID = UrlParameter.Optional}
            );
        }
    }
 

}

编辑4

我想也是这样的:

  @using WebApplication2.Models
@model System.Tuple<人名单,其中,勘察GT;>

<小时/>
< H1>调查< / H1>

<输入类型=按钮ID =科尔值=崩溃的onclick =JavaScript的:CollapseDiv()/>
@ *&其中p为H.;
        调查数量:@ Html.DisplayFor(X => Model.Item2.Count)
    < / P> * @

@ {INT I = 1;}
@foreach(在Model.Item2 VAR调查){
    使用(Html.BeginForm()){
        &其中; H2>调查@(ⅰ)所述; / H2>
        &所述; P />
        @ Html.EditorFor(X => survey.Questions)
        &其中p为H.; @ Html.ActionLink(提交,SubmitSurvey,新{PERSONID = Model.Item1.Id,surveyId = survey.Id},{新@class =BTN BTN-默认})< / P>
        <脚本>
            传播BtnOnclick1(){
                $阿贾克斯({
                    键入:POST,
                    网址:@ Url.Content(〜/人/ SubmitSurvey),
                    数据: {
                        PERSONID:@ Model.Item1.Id,
                        surveyId:@ survey.Id
                    },
                    成功:功能(数据){

                    }
                });
            }
        < / SCRIPT>
        <输入类型=按钮值=保存的onclick =JavaScript的:BtnOnclick1(); />

    }
    我++;
    <小时风格=背景颜色:RGB(126,126,126);身高:5像素/>
}
<小时/>
 

但我得到运行时异常:`有BtnOnclick1的定义

  

未处理的异常,在第47行,在脚本块12列

     

0x800a1391 - BLAD czasu wykonywania kodu的JavaScript:布拉克definicjiBtnOnclick1

解决方案

您是否尝试过jQuery的$。获得(的 http://api.jquery.com/jquery.get/ )或$。员额(的 http://api.jquery.com/jquery.post/ )。包括提到的jQuery后,你可以做这样的事情:

 <按钮的ID ='myButton的'>点击我和LT; /按钮>

<脚本>
$('#为myButton)。点击(函数(){
    $。员额(mysite的/ UpdateDatabase,{PERSONID:@ Model.Item1.Id,surveyId:@ survey.Id},功能(数据){
        警报('更新');
    });
});
< / SCRIPT>
 

I wanted to add a button to my ASP .NET MVC WebApplication's view which will invoke a method:

 public void  UpdateDatabase(int personId, int surveyId) {
          //updating,modifying database
        }

but besides that nothing at all will happen so user will not see any visible changes. The user will not be redirected, visible content of the site will not change, page will not be reloaded.

Just like you click a button with no listener associated with it.

I have tried

 <p> @Html.ActionLink("Update database", "UpdateDatabase", new { personId = Model.Item1.Id, surveyId = survey.Id }, new { @class = "btn btn-default" })</p>

but I am redirected to site:

http://localhost:17697/Person/SubmitSurvey?personId=6&surveyId=6

which is empty.

I would like to achieve only invoking UpdateDatabase method.

EDIT:

EDIT2:

The view looks like this:

@using WebApplication2.Models
@model   System.Tuple<Person, List<Survey>>

<hr />
<h1>Surveys</h1>

<input type="button" id="Coll" value="Collapse" onclick="javascript:CollapseDiv()" />
@*<p>
        Number of Surveys: @Html.DisplayFor(x => Model.Item2.Count)
    </p>*@

@{int i = 1;}
@foreach (var survey in Model.Item2) {
    using (Html.BeginForm()) {
        <h2>Survey @(i)</h2>
        <p />
        @Html.EditorFor(x => survey.Questions)
        <p> @Html.ActionLink("Submit", "SubmitSurvey", new { personId = Model.Item1.Id, surveyId = survey.Id }, new { @class = "btn btn-default" })</p>
        <button id='mybutton'>Click Me</button>
        <script>
            $('#mybutton').click(function(){
                $.post("Person/SubmitSurvey", { personId: {@Model.Item1.Id }, surveyId: {@survey.Id } }, function (data) {
                    alert('updated');
                });
            });
        </script>
    }
    i++;
    <hr style="background-color:rgb(126, 126, 126);height: 5px" />
}
<hr />

and the controllers action:

PersonController:

 public void SubmitSurvey(int personId, int surveyId) {
            System.Diagnostics.Debug.WriteLine("TEXT");
        }

and the result after clicking the button:

EDIT 3

My RouteConfig:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace WebApplication2 {
    public class RouteConfig {
        public static void RegisterRoutes(RouteCollection routes) {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
    }

}

EDIT 4

I tried also this:

@using WebApplication2.Models
@model   System.Tuple<Person, List<Survey>>

<hr />
<h1>Surveys</h1>

<input type="button" id="Coll" value="Collapse" onclick="javascript:CollapseDiv()" />
@*<p>
        Number of Surveys: @Html.DisplayFor(x => Model.Item2.Count)
    </p>*@

@{int i = 1;}
@foreach (var survey in Model.Item2) {
    using (Html.BeginForm()) {
        <h2>Survey @(i)</h2>
        <p />
        @Html.EditorFor(x => survey.Questions)
        <p> @Html.ActionLink("Submit", "SubmitSurvey", new { personId = Model.Item1.Id, surveyId = survey.Id }, new { @class = "btn btn-default" })</p>
        <script>
            function BtnOnclick1() {
                $.ajax({
                    type: 'POST',
                    url: '@Url.Content("~/Person/SubmitSurvey")',
                    data: {
                        personId: '@Model.Item1.Id',
                        surveyId: '@survey.Id'
                    },
                    success: function (data) {

                    }
                });
            }
        </script>
        <input type="button" value="Save" onclick="javascript:BtnOnclick1();" />

    }
    i++;
    <hr style="background-color:rgb(126, 126, 126);height: 5px" />
}
<hr />

but I get runtime exception: `There is no definition of „BtnOnclick1".

Unhandled exception at line 47, column 12 in script block

0x800a1391 - Błąd czasu wykonywania kodu JavaScript: Brak definicji „BtnOnclick1"

解决方案

Have you tried jQuery's $.get (http://api.jquery.com/jquery.get/) or $.post (http://api.jquery.com/jquery.post/). After including reference to jQuery, you can do something like this:

<button id='mybutton'>Click Me</button>

<script>
$('#mybutton').click(function(){
    $.post( "mysite/UpdateDatabase", {personId: "@Model.Item1.Id", surveyId: "@survey.Id"}, function( data ) {
        alert('updated');
    });
});
</script>

这篇关于调用一个控制器通过视图按钮动作,而重定向到任何看法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆