2017-09-23 5 views
0

여기 내 HTTP 포스트 컨트롤러 : 여기 어떻게 구속 된 컨트롤러에 객체를 전달할 수 녹아웃 JS

[HttpPost] 
public ActionResult Create(Employee p) 
{ 
    if (ModelState.IsValid) 
    { 
     Employee employee = EmployeeDataAccess.AddToDatabase(p); 

     return RedirectToAction("Index", "Hr"); 
    } 

    return View(); 
} 

내보기

@model TimeInTimeOut.Models.Employee 

@{ 
    ViewBag.Title = "Create"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

<h2>Create</h2> 

<table> 
    <tr> 
     <td><input type="text" placeholder="LastName" data-bind="value: lastName"/></td> 
    </tr> 
    <tr> 
     <td><input type="text" placeholder="FirstName" data-bind="value: firstName"/></td> 
    </tr> 
    <tr> 
     <td><input type="text" placeholder="MiddleName" data-bind="value: middleName"/></td> 
    </tr> 
    <tr> 
     <td><input type="button" value="Save To Database" data-bind="click: saveToDb"/></td> 
    </tr> 
</table> 

@section Scripts 
    { 
    @Scripts.Render("~/bundles/jquery") 
    @Scripts.Render("~/bundles/knockout") 
    @Scripts.Render("~/Knocks/EmployeeVm.js") 
} 

이며, 여기 내 녹아웃 EmployeeVm입니다 .js :

$(function() { 
    ko.applyBindings(EmployeeVm); 

}); 

var EmployeeVm = { 
    employeeId: ko.observable(0), 
    lastName: ko.observable(''), 
    firsName: ko.observable(''), 
    middleName: ko.observable(''), 

    saveToDb: function() { 
     var self = this; 

     $.ajax({ 
      url: '/Employee/Create', 
      type: 'post', 
      dataType: 'json', 
      data: ko.toJSON(this), 
      contentType: 'application/json', 
      success: function(data) { 
       alert("Successful Employee Insert"); 
      } 
     }); 

    } 
} 

이러한 필드를 하나의 개체에 Create (Employee p)로 전달하는 방법을 모르겠습니다. 자세한 내용을 설명하십시오. 나는 js와 knockout js에 새로운 사람입니다. 또한 최종 사용자가 성 및 이름에 아무 것도 입력하지 않은 상태에서 녹아웃을 사용하여 버튼을 비활성화하는 방법은 다음과 같습니다. 즉, 필드가 비어 있으면 안되며 최종 사용자가 사라지면 사라지도록 경고를 보냅니다. 필드에 텍스트를 넣으시겠습니까?

답변

1
나는 우리가 당신의 Employee이처럼 보이는 가정 하자,

이 대답하기 위해 작성 (직원 P)에 하나의 객체로 해당 필드를 전달하는 방법을 모르는

-

을 당신이 JSONEmployee 포맷 전달하는 것을 알고 (AN HttpPost 방법입니다) 컨트롤러 방법에 대한
public class Employee 
{ 
    public string EmployeeId {get; set;} 
    public string FirstName {get; set;} 
    public string MiddleName {get; set;} 
    public string LastName {get; set;} 
} 

, 당신은 약간 시그 수정해야 Employee 당신이 필요로하는 Request body 아니라 Query string의 일부임을 알려줍니다

public ActionResult Create([FromBody] Employee p) 

- 그래서 같은 방법의 성격. 또한

, 나는 최종 사용자가 같은, 그것은 해당 필드가 비어과 의지해서는 안된다는 경고를 보낼 것입니다, 아직 성 및 FIRSTNAME에 아무 것도 입력되지 않은 상태 녹아웃을 사용하여 버튼을 비활성화 할 수있는 방법 최종 사용자가 일부 텍스트를 입력하면 사라집니다. 버튼이 활성화되어야하는지 확인하려면 다음 관찰 가능한 주변 computed

lastName: ko.observable('').extend({required: true}), 
firsName: ko.observable('').extend({required: true}) 

을 넣어 - -

var canSubmit = ko.computed(function() { 
    return (self.lastName.isValid() && self.firstName.isValid()); 
}); 

을 또한,

당신은 그 필드에 대한 required 필드 validation을 둘 필요 사용자가 firstNamelastName에 대한 값을 입력 할 때 계산 된 값을 계산하려면 knockout에 add 당신의 바인딩에 'valueUpdate'속성을 보내고 -이 활성화되어야하는 경우

그런 다음 제어 할 수 enable 바인딩을 사용 -

<td><input type="button" value="Save To Database" data-bind="click: saveToDb, enable: canSubmit"/></td> 

나는 JS와 녹아웃 JS 새로운 해요.

녹아웃 아주 좋은 튜토리얼이 here