Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在局部视图MVC5之间传递viewmodel_C#_Asp.net_Asp.net Mvc 5 - Fatal编程技术网

C# 在局部视图MVC5之间传递viewmodel

C# 在局部视图MVC5之间传递viewmodel,c#,asp.net,asp.net-mvc-5,C#,Asp.net,Asp.net Mvc 5,我有一个主视图和两个局部视图。我需要能够使用第一个局部视图中的值填充viewmodel,并在单击按钮时将viewmodel传递给第二个局部视图。按钮位于第二个局部视图中。我已经编写了一个javascript函数来实现这一点,但是当我检查controller方法时,viewmodel是空的。正如您在服务框下方的屏幕截图中所看到的,这是第二个局部视图 第一部分视图 @model CC.GRP.MCRequest.ViewModels.NewRequestViewModel <div id="

我有一个主视图和两个局部视图。我需要能够使用第一个局部视图中的值填充viewmodel,并在单击按钮时将viewmodel传递给第二个局部视图。按钮位于第二个局部视图中。我已经编写了一个javascript函数来实现这一点,但是当我检查controller方法时,viewmodel是空的。正如您在服务框下方的屏幕截图中所看到的,这是第二个局部视图

第一部分视图

@model CC.GRP.MCRequest.ViewModels.NewRequestViewModel

<div id="NewRequest">
    <h1>Services</h1>

    @using (Html.BeginForm())
    {

        @Html.LabelFor(model => model.ProjectName, htmlAttributes: new { @class = "control-label col-md-5" })
        @Html.EditorFor(model => model.ProjectName, new { htmlAttributes = new { @class = "form-control", style = "width:100%" } })

        <input type="submit" value="Save" class="btn btn-default" onclick="mapInit()" />
    }


</div>


<script type="text/javascript">

    function mapInit() {
        $.ajax({
            url: '@Url.Action("Service", "request")',
            // datatype: "json",
            data: $('form').serialize(), // update this
            type: "POST",
            // contentType: 'application/json; charset=utf-8'
        });
    }


</script>

第二部分视图

@model CC.GRP.MCRequest.ViewModels.NewRequestViewModel

<div id="NewRequest">
    <h1>Services</h1>

    @using (Html.BeginForm())
    {

        @Html.LabelFor(model => model.ProjectName, htmlAttributes: new { @class = "control-label col-md-5" })
        @Html.EditorFor(model => model.ProjectName, new { htmlAttributes = new { @class = "form-control", style = "width:100%" } })

        <input type="submit" value="Save" class="btn btn-default" onclick="mapInit()" />
    }


</div>


<script type="text/javascript">

    function mapInit() {
        $.ajax({
            url: '@Url.Action("Service", "request")',
            // datatype: "json",
            data: $('form').serialize(), // update this
            type: "POST",
            // contentType: 'application/json; charset=utf-8'
        });
    }


</script>

以下是我对您如何解决任务的建议:

  • 您必须将第二个局部视图表单上的按钮类型更改为按钮类型:
    当ajax方法完成原始提交事件时,此步骤对于不清理表单是必需的
  • 在mapInit函数中,您应该添加一个属性
    success
    ,并在该属性中编写一个函数,以手动方式更新第二个部分表单:

    function mapInit() {
        $.ajax({
            url: '@Url.Action("Service", "request")',
            // datatype: "json",
            data: $('form').serialize(), // update this
            type: "POST",
            success: function (data)
            {
                var html = $(data).find('form').html();
                $('#NewRequest').find('form').html(html);
            }
        });
    }
    
  • 因此,如果您的第一个部分表单具有相同的字段,您将能够用所需内容填充第二个表单。

    1)为您的部分视图创建获取或发布操作。这将获取发布的模型作为参数,并返回第二个部分视图

    2) 在UI中修改部分视图的BeginForm字段并添加OnSuccess事件。(例如)


    3) 创建Jquery方法以在成功时获取请求,并在UI中将第一个部分视图内容替换为第二个部分视图内容。(例如:$(“#PartialView1Container”).html(result);

    发出AJAX请求是一个完全独立的请求-响应周期,与初始视图呈现期间服务器端发生的情况完全分离。如果您需要那里的信息,您必须将其与AJAX请求一起发布,或者在那里重建。对不起,chris。我不明白你的意思。你能给我举个例子吗?我可以在controller中看到视图模型值,但是在客户端,当我发出警报检查模型数据时,它显示为空白。我注意到的另一件事是,我的视图中没有任何称为表单的元素。您是否认为这就是表单元素应该围绕整个页面(即视图本身)而不是单独包含在部分视图中的原因。除非您的局部视图正在执行某种类型的提交操作。此外,您可以在视图本身中设置模型,然后使用相同的模型向下进入每个局部视图。