2015-11-05 80 views
0

我有一個需要登錄的小應用程序。用戶必須從下拉列表中選擇要連接的適當服務器。在這篇文章中,我捕獲了用戶名,密碼,ServerId和ServerName。ASP.Net MVC使用javascript在模型中發佈模型

的登錄模式設置爲這樣:

string Username {get;set;} 
string Password {get;set;} 
Models.Server Server {get;set;} 

服務器型號:

int Id {get;set;} 
string ODBCName{get;set;} 

我有傳遞後登錄模型中的服務器模型的麻煩。 asp方法接受登錄模型。

public ActionResult Login(Models.Login login) 

創建變量的傳遞後在javascript:

var selectionId = $("#Server_ODBCName").data("kendoDropDownList").value(); 
var selectionText = $("#Server_ODBCName").data("kendoDropDownList").text(); 
var username = document.getElementById("Username").value; 
var password = document.getElementById("Password").value; 
var dataItem = { 
      Username: username, 
      Password: password, 
      Server: { 
       Id: selectionId, 
       ODBCName: selectionText, 
      } 
     }; 

當對象被髮布到.NET方法的用戶名和密碼被填充,但服務器爲空。

如何在登錄模型中傳遞服務器以便服務器端模型正確填充?

+0

'模型服務器{獲取;集;}'沒有任何意義,除非你命名你的服務器模型「模型」(這很奇怪)。請完整發布您的代碼。 – ataravati

+0

基於你的修正它應該工作,我能想到的另一件事(缺乏完整的代碼)是在JavaScript和C#代碼之間的ID和ODBCName的數據類型不匹配。 – ndd

回答

0

您可以使用複合模型。它是兩種模式的組合。

1)登錄 2)服務器

使其中具有兩種模型中的一個模型LoginCompositeModel,

namespace <Solution name>.Models 
{ 
public class LoginCompositeModel 
{ 
    public <login_tablename> loginmodel { get; set; } 
    public <server_tablename> servermodel { get; set; } 
} 
} 

您可以使用型號名稱,而不是表名了。

現在說說後在JavaScript中,您可以嘗試AJAX調用

$.ajax({ 
    type:"POST", 
    url: <url>, 
    data: $('#<form-id>').serialize(), 
    success: function(){ 
    //if want to redirect somewhere write in success call 
    //or any other thing you want to do. 
    }, 
    error: function(){ 
    alert("Unexpected error occured"); 
    } 
}); 
0

您的Javascript屬性名是ODBCName而在C#代碼中是ServerName首先糾正此錯字。

0

首先,它顯示你有你的財產ODBCName後,一個額外的「逗號」。這第三個意外的屬性可能導致子對象屬性不被識別爲服務器對象。

另外,你可以嘗試打破你的對象的建設JS:

var dataItem = { 
     Username: username, 
     Password: password 
    }; 

dataItem.Server = { 
      Id: selectionId, 
      ODBCName: selectionText 
     }