我在视图及其多个部分视图之间共享相同模型时遇到问题。
我有一个主视图MainView
,它有自己的模型MainViewModel
。在这个MainView
中,我有一些控件绑定到MainViewModel
中的属性。
点击按钮,我将打开此MainView
的部分视图。说SubView1
。它是局部视图,它由若干控件组成,这些控件绑定到MainViewModel
中的属性。在某些时候,用户在此部分视图SubView1
中输入一些值,然后单击按钮以提交数据。在此期间,我将数据发布到控制器,如下所示:
$.ajax({
type: "POST",
url: "/MainViewController/SomeAction",
data: JSON.stringify({ dataObj: dataArray }),
contentType: "application/json; charset=utf-8",
dataType: "json",
async: true,
success: function (msg) {
ServiceSucceeded(msg);
},
error: function () {
return "error";
}
});
SomeAction代码:
public void SomeAction(List<ModelClass> dataObj)
{
if(dataObj != null)
{
}
}
我的疑问是,由于这个局部视图中的控件已经绑定到MainViewModel
属性,我是否还需要像这样使用json传递它?或者可以在post方法期间从MainViewModel
直接访问数据?我试图将模型传递给post方法,但其数据保持为null。
我的MainViewModel类:
private EnvironmentVariableTarget m_Markers;
private List<SelectListItem> startLocation = new List<SelectListItem>();
public DateTime StartTime { get; set; }
public DateTime EndTime { get; set; }
public string JobId { get; set; }
public string TaskId { get; set; }
public string TrajName { get; set; }
public int UserId { get; set; }
public DateTime StartPeriod { get; set; }
public DateTime EndPeriod { get; set; }
public int Aggr { get; set; }
public string MailId { get; set; }
public string StartLocation { get; set; }
public string EndLocation { get; set; }
public string lblGridHeaderTask { get; set; }
public string lblGridHeaderTraj { get; set; }
public string lblGridAggr { get; set; }
public string lblGridStartDate { get; set; }
public string lblGridEndDate { get; set; }
public int StartLocId { get; set; }
public int EndLocaId { get; set; }
public MySqlConnection databaseConnectionObj;
private MySqlCommand sqlCommandObj;
private Logger m_Logger;
这些是我需要的绑定属性:
public DateTime StartTime { get; set; }
public DateTime EndTime { get; set; }
public string TrajName { get; set; }
当用户点击添加到列表时,我正在添加到这样的javascript数组:
var obj = { TaskId: ccount, TrajName: $('#drpTraj').find(":selected").text(), StartTime: $('#txtStartTime').val(), EndTime: $('#txtEndTime').val(), Aggr: $('#drpAggrInterval').find(":selected").text() }
dataArray.push(obj)
我将这个数组保存在js中,当用户点击提交时,我将整个数组传递回控制器。我的问题是,我正在获得控制权的价值。我问我此时是否可以获得绑定值。
即控件drpTraj
,txtStartTime
和drpAggrInterval
已绑定到viewmodel属性。
我的问题是:
- 还有其他方法可以解决这种情况吗?
- 如果我想传递一个未绑定到viewmodel的数据,那么如何传递它?
- 如果没有使用数据绑定,那么这是传递数据的方式,即使用JSON吗?
醇>
答案 0 :(得分:0)
检查以下代码以通过JSON传递模型数据:
//Your Ajax Call along with Your Model
$("#Addbtn").click(function () {
var YourModel = {
"Id": $("#hdnId").val(),
"Param1": $("#Param1").val(),
"Param2": $("#Param2").val()
};
var YourMasterModel = {
"YourMasterModelList": //You have to create a list of YourModel through for loop and stored into a list variable and pass this to here
"YourModel": YourModel
};
$.ajax(
{
url: '/MainViewController/SomeAction/',
type: "Post",
async: false,
dataType: "html",
data: JSON.stringify(YourMasterModel),
contentType: "application/json;charset=utf-8",
success: function (result) {
$("#YourResultDiv").html("");
}
});
});
//Your Action with your model
/// <summary>
/// Add Data
/// </summary>
/// <param name="YourModel"></param>
/// <returns></returns>
[HttpPost]
public ActionResult AddDataWithModel(YourMasterModel objYourMasterModel)
{
//Here you will get the list of yourmodel data
var listofdata=objYourMasterModel.YourMasterModelList;
return PartialView("_YourPartialView");
}
hdparm -i /dev/sda
希望这会对你有所帮助!!
答案 1 :(得分:-3)
如果你想将参数传递给post方法,请使用以下技巧:
@using (Ajax.BeginForm("action", "controller", null, new AjaxOptions() { OnSuccess = "" }, new { @class = "form-horizontal", role = "form", id = "id" }))
{
//put partial view code into the these brackets
}
如果你想做ajax,那么你需要将数据传递给数据:
// all columnname same name as data model of action
data: {
"columnname1": "John",
"columnname2": "Smith",
"columnname2": "man",
"columnname3": 32
}