【问题标题】:During View data not getting captured in the Controller in ASP.Net Core 2.0 MVC. I am new to ASP.Net core MVC在 ASP.Net Core 2.0 MVC 的控制器中未捕获查看数据期间。我是 ASP.Net 核心 MVC 的新手
【发布时间】:2019-07-20 01:24:49
【问题描述】:

我正在尝试使用 Razor 在 ASP.Net Core 中实现更新/编辑功能。下面是查看页面。

单击提交按钮后,视图页面将发布到控制器的“GetCustomerForEdit”方法,如下面的代码中所述。但不幸的是,视图中的编辑数据没有传输到控制器方法“GetCustomerForEdit”,参数“EditCustomer”类型为“GetAllCustDetails”。

由于我是 ASP.net Core 的新手,我是否在 View 或 Controller 中遗漏了一些东西或做得不对?

查看代码:

<form asp-action="GetCustomerForEdit">
    <div>
        <table class="tables1">

            @foreach (var item in Model.Custs)
            {
                <tr>
                    <th style="width:300px;" colspan="2">Update Customers 
                        Details</th>
                </tr>

                <tr style="visibility:hidden">
                  <td><input asp-for="@item.CustomerId" type="hidden" />/td>
                </tr>

                <tr>
                    <td>First Name</td>
                    <td><input asp-for="@item.FirstName" autofocus 
                        class="textbox1" /></td>
                </tr>
                <tr>
                    <td>Last Name</td>
                    <td><input asp-for="@item.LastName" class="textbox1" /> 
                                                                      </td>
                </tr>
                <tr>
                    <td>Sex</td>
                    <td><select asp-for="@item.Sex" class="textbox1" asp- 
     items="@(new SelectList(ViewBag.listofitems, "Sex", "Sex"))"></select>                           
                    </td>
                </tr>
                <tr>
                    <td>Age</td>
                    <td><input asp-for="@item.Age" class="textbox1" 
                                                   type="text" /></td>
                </tr>
                <tr>
                    <td style="width: 177px">Address1</td>
                    <td><input asp-for="@item.Address1" class="textbox1" 
                                                     type="text" /></td>
                </tr>
                <tr>
                    <td>Address2</td>
                    <td><input asp-for="@item.Address2" class="textbox1" 
                                                     type="text" /></td>
                </tr>
                <tr>
                    <td>State</td>
                    <td><input asp-for="@item.State" class="textbox1" 
                                                    type="text" /></td>
                </tr>
                <tr>
                    <td>City</td>
                    <td><input asp-for="@item.City" class="textbox1" 
                                                   type="text" /></td>
                </tr>
                <tr>
                    <td>Pin</td>
                    <td><input asp-for="@item.Pin" class="textbox1" 
                                                   type="text" /></td>
                </tr>
                <tr>
                    <td>Phone</td>
                    <td><input asp-for="@item.Phone" class="textbox1" 
                                                   type="text" /></td>
                </tr>
                <tr>
                    <td>Mobile</td>
                    <td><input asp-for="@item.Mobile" class="textbox1" 
                                                   type="text" /></td>
                </tr>
                <tr>
                    <td>Email</td>
                    <td><input asp-for="@item.Email" class="textbox1" 
                                                   type="text" /></td>
                </tr>
            }

            <tr class="trfooter">
                <td colspan="2">
                    <input class="submit" type="submit" value="Save" />
                    <input type="reset" class="submit" value="Reset" />
                    <input type="button" class="submit" value="Cancel" />
                </td>
            </tr>
        </table>
        @if (TempData["RecordSave"] != null)
        {
            <p>@TempData["RecordSave"]</p>
        }
    </div>
</form>

型号代码:

public class GetAllCustDetails
{
public int CustomerId { get; set; }

public string FirstName { get; set; }

public string LastName { get; set; }

public List<Customer> Custs;
}

客户模型在哪里:

public class Customer
{
public int CustomerId { get; set; }

[Required(ErrorMessage ="  Please enter First Name!")]
public string FirstName { get; set; }

[Required(ErrorMessage ="  Please enter Last Name!")]
public string LastName { get; set; }

[Required(ErrorMessage ="  Please enter Sex!")]
public string Sex { get; set; }

[Range(0,99)]
[Required(ErrorMessage ="  Please enter valid Age!")]
public int Age { get; set; }

[Required(ErrorMessage ="  Please enter valid Adddress!")]
public string Address1 { get; set; }

public string Address2 { get; set; }

[Required(ErrorMessage ="  Please enter State!")]
public string State { get; set; }

[Required(ErrorMessage ="  Please enter valid State!")]
public string City { get; set; }

[Required(ErrorMessage ="  Please enter valid Pin!")]
public int Pin { set; get; }

public long Phone { set; get; }

public long  Mobile { get; set; }

[EmailAddress(ErrorMessage ="  Please enter valid Email!")]
[Required(ErrorMessage = "Email is required field!")]
public string Email { get; set; }    
}

控制器代码:[HttpGet 工作正常]

[HttpGet]
public IActionResult GetCustomerForEdit(Int16? Id)
{
GetAllCustDetails getCustForEdit;
clsCustomerDAL getCust;

getCust = new clsCustomerDAL();
getCustForEdit = getCust.GetCustomerForUpdate(Id);
SexDropDown();// this is dropdown getting populated from DB

return View(getCustForEdit);
}

[HttpPost]
public IActionResult GetCustomerForEdit([Bind] GetAllCustDetails 
       EditCustomer)
{
bool retVal = false;
int CustId = 0;
string Fname;
string Lname;
if(ModelState.IsValid)
{
    clsCustomerDAL updateCust = new clsCustomerDAL();                

    retVal = updateCust.DALEditCustomer(EditCustomer);

    if(retVal == true)
    {
        ModelState.Clear();
    }
    return View("getCustomerDetails");
}
return View("IndexPage");
}

【问题讨论】:

    标签: asp.net-core


    【解决方案1】:

    由于您需要将 Customer 列表从 View 传递到控制器,因此对于模型绑定,您可以为每个输入指定 name 属性。

    编辑视图:

    @model GetAllCustDetails
        <form asp-action="GetCustomerForEdit">           
            <div>
                <table class="tables1">
    
                    @{int i = 0;}
    
                    @foreach (var item in Model.Custs)
                    {
                        <tr>
                            <th style="width:300px;" colspan="2">
                                Update Customers
                                Details
                            </th>
                        </tr>
    
                        <tr style="visibility:hidden">
                            <td><input asp-for="@item.CustomerId" type="hidden" name="Custs[@i].CustomerId" />/td>
                        </tr>
    
                        <tr>
                            <td>First Name</td>
                            <td>
                                <input asp-for="@item.FirstName" name="Custs[@i].FirstName"  autofocus class="textbox1" />
                            </td>
                        </tr>
    
                        //other <tr> properties
    
                        <tr>
                            <td>Email</td>
                            <td>
                                <input asp-for="@item.Email" name="Custs[@i].Email" class="textbox1" type="text" />
                            </td>
                        </tr>
    
                        i++;
                    }
    
                    <tr class="trfooter">
                        <td colspan="2">
                            <input class="submit" type="submit" value="Save" />
                            <input type="reset" class="submit" value="Reset" />
                            <input type="button" class="submit" value="Cancel" />
                        </td>
                    </tr>
                </table>
                @if (TempData["RecordSave"] != null)
                {
                    <p>@TempData["RecordSave"]</p>
                }
            </div>
        </form>
    

    发布操作:

    [HttpPost]
    public IActionResult GetCustomerForEdit([Bind] GetAllCustDetails EditCustomer)
    

    【讨论】:

    • 你好邹星。感谢您的宝贵建议,我尝试实施您的建议,但视图将空模型返回到控制器方法“[HttpPost] public IActionResult GetCustomerForEdit([Bind] GetAllCustDetails EditCustomer)”。
    • 很奇怪。你尝试添加{get;set;}让GetAllCustDetails模型有一个字段public List&lt;Customer&gt; Custs { get; set; }name属性用于模型绑定,尝试删除 EditCustomer。在里面就像name="Custs[@i].FirstName"
    • 非常抱歉我的错。你是对的,不知何故我错过了“List Custs { get; set; }”这一步,即没有定义 {get;放;}。现在它就像魅力一样工作。 Xing Zou 非常感谢您的帮助,非常感谢。
    • 不客气。如果您的问题已解决,您可以将回复标记为答案。
    猜你喜欢
    • 2017-05-08
    • 1970-01-01
    • 2020-03-12
    • 1970-01-01
    • 2017-04-30
    • 2019-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多