2015-10-29 74 views
0

我正在開發一個MVC應用程序,我無法理解爲什麼我將null值視爲'null'。嘗試使用AngularJS保存客戶詳細信息

應該如何將JavaScript中的日期值序列化爲C#。

查看代碼:

@{ 
    Layout = null; 
} 

<!DOCTYPE html> 

<html ng-app="mvcCRUDApp"> 
<head> 
    <meta name="viewport" content="width=device-width" /> 
    <title>Index</title> 


    <script src="~/Scripts/jquery-1.8.2.min.js"></script> 
    <script src="~/Scripts/angular.min.js"></script> 

    <script type="text/javascript"> 
     var app = angular.module("mvcCRUDApp", []); 

     app.service("crudAJService", function ($http) { 

      // save Customer 
      this.saveCustomer = function (objCustomer) { 
       var response = $http({ 
        method: "post", 
        url: "Customer/PostDataResponse", 
        data: JSON.stringify(objCustomer), 
        dataType: "json" 
       }); 
       return response; 
      } 


     }); 

     app.controller("mvcCRUDCtrl", function ($scope, crudAJService) { 

      $scope.AddCustomer = function() {     

       var objCustomer = { 
        id: "0", 
        Name: $('#txtName').val(), 
        Surname: $('#txtSurname').val(), 
        BirthDate: $('#txtBirthDate').val(), 
        Gender: $('#txtGender').val(), 
        CityId: $('#drpCity').val() 
       }; 

       var getBookData = crudAJService.saveCustomer(objCustomer); 
        getBookData.then(function (msg) 
        { 
         alert(msg.data);       
        }, function() { 
         alert('Error in updating book record'); 
        }); 
       }       
     }); 

    </script> 

    <script> 

     $(document).ready(function() 
     { 
      $("#drpState").change(function() { 
       $("#drpCity").empty(); 
       $("#drpCity").append('<option value="0">-Select-</option>'); 
       $.ajax({ 
        type: 'POST', 
        url: '@Url.Action("SelectCities")', 
        dataType: 'json', 
        data: { Stateid: $("#drpState").val() }, 
        success: function (cities) { 
         // cities contains the JSON formatted list 
         // of state id passed from the controller 
         $.each(cities, function (i, city) 
         { 
          $("#drpCity").append('<option value="' 
          + city.id + '">' 
          + city.Name + '</option>'); 
         }); 
        }, 
        error: function (ex) 
        { 
         alert('Failed to retrieve states.' + ex); 
        } 
       }); 
       return false; 
      }) 
     }); 
    </script> 
</head> 
<body> 
    <div ng-controller="mvcCRUDCtrl"> 
     <fieldset> 
      <table> 
       <tr><td>@Html.Label("Name")</td><td>@Html.TextBox("txtName")</td><td>@Html.Label("Surname")</td><td>@Html.TextBox("txtSurname")</td></tr> 
       <tr><td>@Html.Label("BirthDate")</td><td>@Html.TextBox("txtBirthDate")</td><td>@Html.Label("Gender")</td><td>@Html.TextBox("txtGender")</td></tr> 
       <tr> 
        <td>State</td> 
        <td>@Html.DropDownList("drpState", ViewBag.StateCollection as List<SelectListItem>)</td> 
        <td>City</td> 
        <td>@Html.DropDownList("drpCity", ViewBag.CityCollection as List<SelectListItem>)</td> 
       </tr> 
       <tr><td><input type="submit" value="Submit" ng-click="AddCustomer()" /></td></tr> 
      </table> 
     </fieldset> 
    </div> 
</body> 
</html> 

Following is THE CODE OF CONTROLLER 

    using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using DutchProject.Models; 

namespace DutchProject.Controllers 
{ 
    public class CustomerController : Controller 
    { 

     DutchEntities db = new DutchEntities(); 

     // 
     // GET: /Customer/ 

     public ActionResult Index() 
     { 
      List<SelectListItem> States = new List<SelectListItem>(); 

      var lstStates = db.States.ToList(); 

      States.Add(new SelectListItem { Text = "-Select-", Value = "0" }); 
      foreach (var item in lstStates) 
      { 
       States.Add(new SelectListItem { Text = item.Name, Value = item.id.ToString() }); 
      } 

      ViewBag.StateCollection = States; 


      List<SelectListItem> Cities = new List<SelectListItem>(); 

      Cities.Add(new SelectListItem { Text = "-Select-", Value = "0" }); 
      ViewBag.CityCollection = Cities; 



      return View(); 
     } 

     [HttpPost] 
     public JsonResult SelectCities(int Stateid) 
     { 
      IEnumerable<City> cities = db.Cities.Where(stat => stat.StateId == Stateid); // .Where(stat => stat.country_id == id); 
      return Json(cities); 
     } 

     [HttpPost] 
     public ContentResult PostDataResponse(Customer objCustomer) 
     { 
      objCustomer.BirthDate = DateTime.Now; 
      objCustomer.Gender = 1; 

      db.Customers.Add(objCustomer); 
      db.SaveChanges(); 

      return Content("First name: " + Request.Form["firstName"] + 
       " | Last name: " + Request.Form["lastName"] + 
       " | Age: " + Request.Form["age"]); 
     } 

    } 
} 
+0

其實,代碼並不完全解釋你在做什麼!哪些值有時會變爲空?你是否嘗試瞭解代碼的哪一部分是有問題的部分?因爲,你的問題太不明確了! – jkalden

+0

這個代碼的一半是MVC,另一半是angularjs。您曾建議您遇到MVC代碼問題,但您已將問題標記爲角度問題。從更高層次的角度來看,如果你打算使用角度,那麼到處使用角度,不要將它與MVC混合在一起。除此之外,你可能想澄清一下你的問題,並重新標記它。 – Claies

+0

查看代碼更多,我甚至不認爲角度在這個代碼中做任何事情。它似乎是重複的代碼,並且在HTML中沒有角色綁定或函數調用。 – Claies

回答

0

ASP.NET MVC中傳遞的無效值控制器動作null值。事先對validate the date有所幫助,以確保該值有效。

此外,它可能會幫助到指定的日期,而不是字符串:

... 
var objCustomer = { 
         id: "0", 
         Name: $('#txtName').val(), 
         Surname: $('#txtSurname').val(), 
         BirthDate: new Date($('#txtBirthDate').val()), 
         Gender: $('#txtGender').val(), 
         CityId: $('#drpCity').val() 
        }; 
... 
相關問題