【问题标题】:Check hidden bool value to run method检查隐藏的布尔值以运行方法
【发布时间】:2013-09-24 14:06:19
【问题描述】:

所以基本上我的模型中有一个布尔值,在我看来,我有一个隐藏字段,当我选择了某个选择框时,我将其设置为 true 或 false。现在我有了这个,我需要以某种方式检查隐藏字段的值和控制器中 bool 的值。如果是真的我想运行一个方法,如果它是假的我希望它跳过这个方法。

这是我的 html,不可见字段位于底部:

<div id="addTransfereeForm" class= "invisible" "whiteborder">
    <form name="addTransferee" id="addTransferee">
    <p><b><u>Add a New Transferee</u></b></p>
        Transfer Effective Date: <input type="text" name="transfereffectivedate"     class="datepicker"<br /> <br />
        Transferee Name: <input type="text" name="transfereename" /><br />
        Transferee Notice Address Line 1: <input type="text" name="transfereenoticeaddressline1" /><br />
        Transferee Notice Address Line 2: <input type="text" name="transfereenoticeaddressline2" /><br />
        Transferee Notice City: <input type="text" name="transfereenoticecity" /><br />
        Transferee Notice State: <input type="text" name="transfernoticestate" /><br />
        Transferee Notice Zip: <input type="text" name="tranfernoticezup" /><br />
        Transferee Notice Phone: <input type="text" name="transfereenoticephone" /><br />
        Transferee Payment Address Line 1: <input type="text" name="transfereepaymentaddressline1" /><br />
        Transferee Payment Address Line 2: <input type="text" name="transfereepaymentaddressline2" /><br />
        Transferee Payment City: <input type="text" name="transfereepaymentcity" /><br />
        Transferee Payment State: <input type="text" name="transfereepaymentstate" /><br />
        Transferee Payment Zip: <input type="text" name="transfereepaymentzip" /><br />
        Transferee Payment Phone: <input type="text" name="transfereepaymentphone" /><br />
        <input type="hidden" name="newtransferee" />
    </form>
</div>

这是我的模型(NewTransferee 是我设置为真或假的布尔值):

 public class CreateTransferee
{
    public DateTime? TransferEffectiveDate { get; set; }
    public string TransfereeName { get; set; }
    public string TransfereeNoticeAddressLine1 { get; set; }
    public string TransfereeNoticeAddressLine2 { get; set; }
    public string TransfereeNoticeCity { get; set; }
    public string TransfereeNoticeState { get; set; }
    public string TransfereeNoticeZip { get; set; }
    public string TransfereeNoticePhone { get; set; }
    public string TransfereePaymentAddressLine1 { get; set; }
    public string TransfereePaymentAddressLine2 { get; set; }
    public string TransfereePaymentCity { get; set; }
    public string TransfereePaymentState { get; set; }
    public string TransfereePaymentZip { get; set; }
    public string TransfereePaymentPhone { get; set; }
    public bool NewTransferee { get; set; }
}

这是我的控制器(我需要对其进行编辑以使其在运行结束部分之前检查布尔值):

 [NoCache]
    [HttpPost]
    [ValidateAntiForgeryToken]

    public JsonResult ResolveProfileSelectionRequired(ResolveProfileSelectionRequiredModel model)
    {
        var resolved = SqlDataProvider.ResolveProfileSelectionRequiredJobException(model);

        return resolved ? Json("Success") : Json("Failed");
    }

如果 bool 为真(位于 SQLDataProvider.cs 中),我终于有了我创建的运行方法:

public static int CreateNewTransferee(CreateTransferee model)
    {

        using (var db = new NJB.NJBDataContext())
        {
            var result = db.SP_AddTransferee(
            model.TransferEffectiveDate,
            model.TransfereeName,
            model.TransfereeNoticeAddressLine1,
            model.TransfereeNoticeAddressLine2,
            model.TransfereeNoticeCity,
            model.TransfereeNoticeState,
            model.TransfereeNoticeZip,
            model.TransfereeNoticePhone,
            model.TransfereePaymentAddressLine1,
            model.TransfereePaymentAddressLine2,
            model.TransfereePaymentCity,
            model.TransfereePaymentState,
            model.TransfereePaymentZip,
            model.TransfereePaymentPhone);

           return (int) result.ReturnValue;
        }
    }

【问题讨论】:

  • 还有...问题是什么? model.NewTransferee 是否不包含控制器操作中的预期值?
  • 对不可见的输入字段使用&lt;input type="hidden" ... />`。
  • @David 我对 MVC 有点陌生,我想简单地检查控制器中 bool 的值,我什至根本无法启动。我需要编辑控制器的该部分以检查页面发布时布尔值是真还是假。然后根据该检查运行方法。

标签: c# javascript html model controller


【解决方案1】:

如果您需要做的只是检查布尔值,那只是一个条件语句:

public JsonResult ResolveProfileSelectionRequired(ResolveProfileSelectionRequiredModel model)
{
    if (model.NewTransferee)
    {
        // do something
    }
    else
    {
        // do something else
    }
}

但您的目标并不完全清楚,因为您当前的 return 语句取决于您只想有条件地调用的方法的输出。所有代码路径都需要返回 something。也许是这样的?:

public JsonResult ResolveProfileSelectionRequired(ResolveProfileSelectionRequiredModel model)
{
    if (model.NewTransferee)
    {
        var resolved = SqlDataProvider.ResolveProfileSelectionRequiredJobException(model);

        return resolved ? Json("Success") : Json("Failed");
    }
    else
    {
        return Json("Success");
    }
}

再说一次,如果不了解您对此操作的预期行为的更多信息,我就无法知道。

值得注意的是,这并不是真正的“MVC”。在最简单的情况下,此操作方法只是一个接收ResolveProfileSelectionRequiredModel 类型参数的方法。条件语句只是普通的 C#。所有返回值的代码路径都是纯 C#。这个方法唯一的“MVC”是它返回一个JsonResult


编辑:我刚刚注意到...您要查找的值在 CreateTransferee 模型上,但您的控制器收到的是 ResolveProfileSelectionRequiredModelResolveProfileSelectionRequiredModel 上有这个值吗?它们似乎非常相似。如果它不在该模型上,您可以将其添加到该模型或使用@Raidri 的方法将其作为显式参数添加到控制器操作。

【讨论】:

    【解决方案2】:

    使用新参数扩展您的控制器操作:

    public JsonResult ResolveProfileSelectionRequired(ResolveProfileSelectionRequiredModel model, bool newtransferee = false)
    

    并在动作中检查它。

    【讨论】:

    • 好的,我知道这是一个菜鸟问题,但最好的方法是通过 if-else 语句检查并应用需要在为 true 时运行的方法并在何时传递该方法假的?
    • 是的(if 语句就足够了,不需要else
    【解决方案3】:

    你可以使用:

    if (Request.Form["newtransferee"].ToLower() == "true")
    

    或者如果你写这个而不是手动html,它会起作用吗?

    @Html.HiddenFor(model => model.NewTransferee)
    

    【讨论】:

      猜你喜欢
      • 2021-02-24
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 2015-03-13
      • 2015-09-06
      • 2017-01-22
      • 2016-09-03
      • 1970-01-01
      相关资源
      最近更新 更多