Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.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# POST请求和get集合操作MVC_C#_Asp.net Mvc_Http Post_Http Get - Fatal编程技术网

C# POST请求和get集合操作MVC

C# POST请求和get集合操作MVC,c#,asp.net-mvc,http-post,http-get,C#,Asp.net Mvc,Http Post,Http Get,我似乎无法理解这一点,我相信这是很简单的。 每当我按下“更新/保存”按钮时,我的代码就会转到我的Order类来执行{get;set}。但是,它将MyPhonePrimary字段作为“null”传递,这会导致错误 下面是EditOrder.cshtml页面 @using (Html.BeginForm()) { <div class="form-group-PhonePrimary"> <div

我似乎无法理解这一点,我相信这是很简单的。 每当我按下“更新/保存”按钮时,我的代码就会转到我的Order类来执行{get;set}。但是,它将MyPhonePrimary字段作为“null”传递,这会导致错误

下面是EditOrder.cshtml页面

       @using (Html.BeginForm())
         {
           <div class="form-group-PhonePrimary">
                <div class="input-group" style="border-right:0px">
                    <span class="input-group-addon" style="text-align: left; border-right: 0px; min-width: 115px">Phone #</span>
                        @Html.TextBoxFor(model => model.order.PhonePrimary, new { @class = "form-control", @maxlength = "13" })
                        @Html.ValidationMessageFor(model => model.order.PhonePrimary)
                </div>
            </div>

        <div class="form-group" style="padding-left:5px">
            <div class="btnUpdateSave">
                <input type="submit" value="Update/Save" class="btn btn-primary col-md-10" />
            </div>
        </div>
       }
public class EditOrderViewModel
{
    public Order order { get; set; }
    public List<Status> StatusOptions { get; set; }
    public IEnumerable<Document> Documents { get; set; }
    public IEnumerable<Notary> Notaries { get; set; }
    public Notary NotaryAssigned { get; set; }
}
以下是EditOrder.cshtml页面中使用的EditOrderViewModel

       @using (Html.BeginForm())
         {
           <div class="form-group-PhonePrimary">
                <div class="input-group" style="border-right:0px">
                    <span class="input-group-addon" style="text-align: left; border-right: 0px; min-width: 115px">Phone #</span>
                        @Html.TextBoxFor(model => model.order.PhonePrimary, new { @class = "form-control", @maxlength = "13" })
                        @Html.ValidationMessageFor(model => model.order.PhonePrimary)
                </div>
            </div>

        <div class="form-group" style="padding-left:5px">
            <div class="btnUpdateSave">
                <input type="submit" value="Update/Save" class="btn btn-primary col-md-10" />
            </div>
        </div>
       }
public class EditOrderViewModel
{
    public Order order { get; set; }
    public List<Status> StatusOptions { get; set; }
    public IEnumerable<Document> Documents { get; set; }
    public IEnumerable<Notary> Notaries { get; set; }
    public Notary NotaryAssigned { get; set; }
}
下面是SchedulingREpository.cs中的Order_FindById函数。我正在使用Dapper帮助处理SQL命令

    public EditOrderViewModel Order_FindById(int id)
    {
        var parameters = new DynamicParameters();

        parameters.Add("@ID", value: id);

        var query = @"long query string that i dont want to put";

        using (var multi = this.db.QueryMultiple(query, parameters))
        {
            EditOrderViewModel editVM = new EditOrderViewModel();
            editVM.order = multi.Read<Order>().SingleOrDefault();
            editVM.StatusOptions = multi.Read<Status>().ToList();
            editVM.Documents = multi.Read<Document>().ToList();
            return editVM;
        }
    }
public EditOrderViewModel Order\u FindById(int-id)
{
var参数=新的DynamicParameters();
参数。添加(“@ID”,值:ID);
var query=@“我不想放入的长查询字符串”;
使用(var multi=this.db.QueryMultiple(查询,参数))
{
EditOrderViewModel editVM=新的EditOrderViewModel();
editVM.order=multi.Read().SingleOrDefault();
editVM.StatusOptions=multi.Read().ToList();
editVM.Documents=multi.Read().ToList();
返回editVM;
}
}

每当我切换到使用
model.order.\u PhonePrimary
而不是当前代码中的(
model.order.PhonePrimary
)。我没有收到任何错误,但是我的
BeautifyNumber()
从未被触发。

在将模型指定给视图之前,请确保实例化Order属性

例如:

public ActionResult EditOrder() {
    var vm = new EditOrderViewModel();
    vm.Order = new Order();
    return View(vm);
}
编辑:在您的回购中尝试以下操作:

editVM.order = multi.Read<Order>().SingleOrDefault() ?? new Order();
editVM.order=multi.Read().SingleOrDefault()??新秩序();

编辑2:可能是模型绑定问题。您可以考虑在POST操作中使用自定义模型绑定器,也可以通过在视图模型中直接引用PhonePrimary并让您的repo负责在POST后将其填充和消化到订单条目中来绕过订单嵌套类的需要

所以,我不确定这是如何解决问题的。但它确实如此(目前…仍在等待更多涉及此问题的错误)

我使用

if (numberToBeautifuy != null)
{
//code
}
else
{
 return "";
}
完成的功能如下所示

    public static String BeautifyPhoneNumber(string numberToBeautify)
    {
        if (numberToBeautify != null)
        {


            //The below gives us capture groups for each 
            //individual piece of the number.
            var regularExpression = new Regex(@"(\d{3})(\d{3})(\d{4})(x\d*)?");
            //This matches a number that's already been beautified, 
            //so we can guard against beautifying twice.
            var alreadyBeautifulExpression = new Regex(@"(\(\d{3}\)) (\d{3})-(\d{4}) ?(x\d*)?");
            var beautifulNumber = string.Empty;
            var separator = "-";
            var space = " ";
            //This prevents us from accidentally beautifying 
            //something more than once
            //You could also guard against this in your getter using a
            //IsBeautified extension, using the alreadyBeautifulExpression above
            if (alreadyBeautifulExpression.IsMatch(numberToBeautify))
            {
                return numberToBeautify;
            }

            //Trying to protect against invalid input... May be insufficient,
            //Or unnecessary
            if (string.IsNullOrEmpty(numberToBeautify)
                || regularExpression.Matches(numberToBeautify).Count <= 0)
            {
                return beautifulNumber;
            }

            GroupCollection groups = regularExpression.Matches(
                numberToBeautify)[0].Groups;

            //More protection against invalid input
            if (groups.Count <= 3)
            {
                return beautifulNumber;
            }

            //Given "7689131234",
            beautifulNumber += "(" + groups[1] + ")" + space; //gives us "(768) "
            beautifulNumber += groups[2] + separator; //gives us "(768) 913-"
            beautifulNumber += groups[3]; //gives us "(768) 913-1234"
            //If we have an extension, we add it.
            if (groups[4] != null)
            {
                beautifulNumber += space + groups[4];
            }

            return beautifulNumber;
        }
        else
        {
            return "";
        }
    }
公共静态字符串美化PhoneNumber(字符串编号美化)
{
if(numberToBeautify!=null)
{
//下面为我们提供了每个组的捕获组
//单件号码。
var regularpression=newregex(@“(\d{3})(\d{3})(\d{4})(x\d*)?”;
//这和一个已经被美化的数字相符,
//因此,我们可以防止美化两次。
var alreadyBeautifulExpression=newregex(@“(\(\d{3})(\d{3})-(\d{4})-(x\d*)?”;
var beautifulNumber=string.Empty;
var分隔符=“-”;
var space=“”;
//这可以防止我们无意中美化
//不止一次
//您还可以在getter中使用
//使用上面的alreadyBeautifulExpression实现了扩展
if(alreadyBeautifulExpression.IsMatch(numberToBeautify))
{
回归数美化;
}
//试图防止无效输入…可能不够,
//或不必要
if(string.IsNullOrEmpty(numberToBeautify)

||regularExpression.Matches(数字美化).Count您是否尝试过运行Fiddler或类似的程序来查看提交回服务器的内容?如果是,它是表单中的null,还是没有填充控制器的操作参数?如果我使用与OP相同的代码,我会在Fiddler-&order上的TextView中得到它。PhonePrimary=%28883%29+332-9302+>但是,在order类中PhonePrimary变量的“PhonePrimary”引发了类型为“System.ArgumentNullException”的异常值=值不能为null。参数名称:inputIs“Order”模型的属性?如果是,您是否在将模型分配给视图之前实例化了Order属性?我将提交一个带有代码的答案,向您说明我的意思。我是,但以另一种方式(使用存储库)。我将控制器代码添加到存储库中的OPE中,您是否允许EF通过外键提供Order属性(导航属性)?我正在使用Dapper来处理我的存储库。(现在将repo代码添加到OP中)非常抱歉;我不知道为什么我假设您正在使用EF。SingleOrDefault是否可能返回null?这是引用类型的默认值。如果为null,您可以尝试返回新订单(请稍后参阅我的编辑).Nope,不是这样。在my Order_FindById()中,editVM.Order返回my_PhonePrimary(看起来像111222333)和my PhonePrimary(看起来像(111)222-3333)的值