在与多个部分视图共享相同模型时发出问题

时间:2016-11-21 05:01:09

标签: c# asp.net-mvc

我在视图及其多个部分视图之间共享相同模型时遇到问题。

我有一个主视图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中,当用户点击提交时,我将整个数组传递回控制器。我的问题是,我正在获得控制权的价值。我问我此时是否可以获得绑定值。 即控件drpTrajtxtStartTimedrpAggrInterval已绑定到viewmodel属性。

  

我的问题是:

     
      
  1. 还有其他方法可以解决这种情况吗?
  2.   
  3. 如果我想传递一个未绑定到viewmodel的数据,那么如何传递它?
  4.   
  5. 如果没有使用数据绑定,那么这是传递数据的方式,即使用JSON吗?
  6.   

2 个答案:

答案 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
}