我有一个需要登录的小应用程序。用户必须从下拉列表中选择要连接的相应服务器。在帖子上我捕获了用户名,密码,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方法时,将填充用户名和密码,但服务器为空。
如何在登录模型中传递服务器,以便正确填充服务器端模型?
答案 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
}