2015-11-05 81 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 
     }