如何将div值作为模型的一部分传递给后端控制器方法

时间:2018-04-17 16:31:16

标签: javascript jquery .net asp.net-mvc razor

问题:我想在UI中使用一个div ,我希望通过 JQuery 向其中呈现一些值,当我提交时表单我应该能够在后端中访问它。

查看:

 @model ScheduleAptMV
        using (Html.BeginForm())
        {
           ////// I want a div here /////
            @Html.LabelFor(model => model.FirstName })
            @Html.EditorFor(model => model.FirstName)
            <input type="submit" value="Make Appointment"/>
        }
    }

型号:

public class ScheduleAptMV
{
    public string FirstName {get; set;}
}

控制器:

    [HttpPost]
    public ActionResult SaveDelayedPayment(ScheduleAptMV data)
    {
         // I want to be able to access the Div text too
    }

部分解决方案1:

我添加了一个div

  <div id="totalAmount"></div>

使用Jquery,我添加了类似

的内容
$("#totalAmount").text("HelloFoo");

但我的问题是它与模型无关,所以如何将发送到后端。

部分解决方案2:

我可以在我的模型中创建属性,它将表示div内容,以便它获得强烈绑定。此值仅用于显示用户应该 不允许编辑它,只有它应该由Jquery代码呈现。我可以用

 @Html.DisplayFor()

如下所示:

新模式:

public class ScheduleAptMV
{
    public string FirstName {get; set;}
    public decimal totalAmount{get; set;}
}

新视图:

<span class="myClass">
    @Html.DisplayFor(model => model.totalAmount)
</span>

问题:但现在如何使用 Jquery 呈现此属性。我是否需要使用除DisplayFor之外的其他内容。

编辑:这是DisplayFor当前呈现的方式。

  <span class="myClass">
    0.00
        </span> 

问题:如果我关注第2条,那么如何将课程附加到DisplayFor元素。

1 个答案:

答案 0 :(得分:1)

解决方案1 ​​

将您的操作签名更改为

public ActionResult SaveDelayedPayment(ScheduleAptMV data, int totalAmount)

但是它必须是一个POSTable实体,例如文本框,不是 div。所以添加一个隐藏的输入:

<input type='hidden' name='totalAmount' id='totalAmount'/>
<div id='totalAmountDisplay'></div>

并相应地设定:

 $("#totalAmountDisplay").text("1024");
 $("#totalAmount").val(1024);

解决方案2

与解决方案1类似,您只需要一个隐藏的输入即可进行POST:

@Html.HiddenFor(m => m.totalAmount)

确保<form>内的内容自动绑定。使用.DisplayFor添加显示,或者您喜欢和jquery添加更新(如果需要)与上面类似。