2012-12-20 65 views
0

使用asp.net MVC,是否有一種最佳實踐方法來在用戶輸入主鍵字段後異步填充相關字段。例如,一旦用戶在表單上輸入了EmployeeID,如果輸入的EmployeeID有效,那麼應該填充employeeName。Asp.net MVC從主字段填充相關字段

(我已經使用了RemoteAttribute來驗證所輸入的僱員是否有效,並希望這將是能夠以某種方式返回相關領域,因爲它已經進行調用到存儲庫。)

回答

2

您可以使用jQuery來調用一個異步操作傳遞ID和返回上填寫比賽成績,嘗試像

$(document).ready(function() { 

    $("#employeeId").change(function() { 

     $.ajax({ 
      url: '@Url.Action("GetEmployeeData", "Employee")', 
      type: 'POST', 
      dataType: 'json', 
      data: { employeeId : $("#employeeId").val() }, 
      contentType: 'application/json; charset=utf-8', 
      success: function (data) { 
       if (data.success) 
       { 
        // fill the employee name 
        $("#employeeName").val(data.employeeName); 
       } 
       else 
       { 
        // show a message in a alert or div 
        alert('This Employee ID is not valid. Try again!'); 
        $("#employeeId").text("").focus(); 
       } 
      } 
     }); 

    }); 

}); 

而在你的行動做,嘗試創建一個POST方法將返回名稱或您需要的任何屬性,只需添加到Josn方法返回。

[HttpPost] 
public ActionResult GetEmployeeData(string employeeId) 
{ 
    var employee = /* get your employee using employeeId parameter from Repository*/; 
    if (employee != null) 
    { 
     return Json(new { success = true, employeeName = employee.Name }); 
    } 
    return Json(new { success = false }); 
} 
+0

非常感謝......雖然我不得不將方法類型更改爲GET而不是POST。 –

1

不,RemoteAttribute不返回數據值,只返回驗證信息。這裏最好的做法是使用javascript/jquery/ajax。如果你已經有一個包裝你的員工ID文本框的表單元素,你可以在驗證成功時提交它。然後,您可以使用javascript來攔截該表單提交併將AJAX請求發送到您的控制器上的一個操作方法,該方法返回一個JsonResult。當您在瀏覽器中收到JSON時,請使用它填充其他字段。

回覆意見:

不要把它包裝在嵌套形式。表單中的表單不是有效的HTML。如果你使用這個員工ID來填充另一個表單(另一組文本框),是的,我會讓他們2個單獨的(同級)表單。你的JSON也應該返回EmployeeID,而在第二種形式中,我會把它放在一個隱藏的字段中,而不是重複使用用戶輸入的員工ID的文本框。

+0

謝謝丹,害怕它會是這麼多步驟。所以,你在談論的那種形式...... employeeID確實已經包含在一個表單中,並且包含了很多其他元素......你說我可以(應該)將employeeID包裝成自己的嵌套形式,只包含那一個元素? –