ASP.Net MVC使用javascript在模型中发布模型

时间:2015-11-05 19:57:16

标签: javascript c# asp.net-mvc

我有一个需要登录的小应用程序。用户必须从下拉列表中选择要连接的相应服务器。在帖子上我捕获了用户名,密码,ServerId和ServerName。

登录模型的设置如下:

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

服务器型号:

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

我在发布时在Login模型中传递Server模型时遇到问题。 asp方法接受Login模型。

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方法时,将填充用户名和密码,但服务器为空。

如何在登录模型中传递服务器,以便正确填充服务器端模型?

2 个答案:

答案 0 :(得分: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");
  }
}); 

答案 1 :(得分:0)

首先,您的ODBCName属性后面会显示一个额外的'逗号'。第三个非预期的属性可能导致子对象属性不被识别为Server对象。

此外,您可以尝试在js中打破对象的构建:

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

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