2015-01-31 3 views
0

У меня есть приложение asp.net mvc 5, но я не могу получить этот довольно простой скрипт для работы. Я новичок в этом MVC (я парень WebForms). В основном jQuery не прикрепляет событие .click() к кнопке для отправки данных базовому контроллеру.jquery click method не подключен к кнопке

Может ли кто-нибудь определить, что я делаю неправильно?

The View (HelloWorld/Index.cshtml):

@model HelloWorld.Models.HelloWorldModel 

<!DOCTYPE html> 
<html> 
<head> 
    <title>Hello World</title> 
    <script src="~/Scripts/jquery-2.1.3.min.js"></script> 
</head> 
<body> 
    <div> 
    @using (Html.BeginForm("Welcome","HelloWorld",FormMethod.Post, new {id = "myhelloform"})){ 

    <span>Name:</span> 
     @Html.TextBoxFor(model=> model.Name) 
    <button id="btnPost" type="button">Post</button> 
    } 
    </div> 

    <script> 
    var testform = function() { 
     var init = function() { 
      $("#btnPost").on("click", function() { 
       alert("anybody there??"); 
       submitForm(); 
      }); 
     }; 

     var submitForm = function() { 
      $.hit({ 
       url: "@Url.Action("Welcome", "HelloWorld")", 
       data: $("#myhelloform").serializeArray(), 
       success: function (response) { 
        alert(response.Message); 
       } 
      }); 
     }; 

     return { 
      Init: init 
     }; 
    }; 

    </script> 
</body> 
</html> 
</html> 

контроллер (контроллеры/HelloWorldController.cs):

using System.Web.Mvc; 
namespace HelloWorld.Controllers 
{ 
    public class HelloWorldController : Controller 
    { 
     public ActionResult Index() 
     { 
      return View(); 
     } 

     [HttpPost] 
     public JsonResult Welcome() 
     { 
      return Json("test"); 
     } 
    } 
} 

модели (модели/HelloWorldModel.cs)

namespace HelloWorld.Models 
{ 
    public class HelloWorldModel 
    { 
     public string Name { get; set; } 
    } 
} 
+0

Похоже, ваш Функция init никогда не вызывается ... Добавьте предупреждение в начало этой функции для проверки. –

+0

Пробовал, что ... нет предупреждения :( – Sha

+0

https://dotnetfiddle.net/HCdFXM Работает без тестовой формы и инициализации – Tuco

ответ

2

Удалить переменные testform и инициализации, и она работает (Также нужно использовать $ (документ) .ready, как упоминает @Tbseven):

$(document).ready(function() { 
       $("#btnPost").on("click", function() 
           { 
            alert("anybody there??"); 

           }); 
}); 

Fiddle: https://dotnetfiddle.net/HCdFXM

1

Вы должны разместить свой код jquery внутри следующей функции:

$(document).ready(function() { 
    // Here 
}); 
+0

Даже это не работает. в IE 11 и FF 35. – Sha

1
$(document).ready(function() { 
    $("#btnPost").on("click", function() { 
     alert("anybody there??"); 
     submitForm(); 
    }); 

    function submitForm() { 
     $.hit({ 
      url: "@Url.Action("Welcome", "HelloWorld")", 
      data: $("#myhelloform").serializeArray(), 
      success: function (response) { 
       alert(response.Message); 
      }); 
    }; 
}); 
+1

Это должно инициализировать все на готовом документе. –

+0

Спасибо @JeffWatkins - JAT избил вас хотя я так и дал ему ответ. – Sha

+1

Нет проблем, я просто здесь, чтобы помочь (и не смотреть в глаза, поскольку я редко получаю возможность кодировать в настоящее время). –

1

Вы можете использовать вход вместо кнопку и нет необходимости добавлять событие щелчка для этого.

<input type="submit" id="btnPost" /> 
+0

Я мог бы, но в принципе, упростить свой вопрос здесь, на SO - причина использования

+0

Согласен, вы должны поймать событие отправки +1 – Tuco

+0

@Sha: вы можете добавить это тоже для этого с помощью этого простого правила: 'input [type =" submit "] {// ваше правило здесь ..}' –

Смежные вопросы