在mvc中检索GET方法中的模型属性值

时间:2016-01-07 06:58:19

标签: c# asp.net-mvc linq razor asp.net-mvc-5

我有以下GET方法,它是创建表单的代码

 public ActionResult Add_Product(string Product_ID)
 { 
        AddNewProduct sample = new AddNewProduct();

        return View(sample);
 }

这是

的模型类
public class AddNewProduct
{
    public string Product_ID { get; set; }

    ...
}

这是create form

    @model project_name.Models.AddNewProduct    

    <h4>Add New Product</h4>    

    @using (Html.BeginForm()) 
    {
        @Html.AntiForgeryToken()

        <div class="form-horizontal">                
            @Html.ValidationSummary(true, "", new { @class = "text-danger" }) <div class="form-group">
                @Html.LabelFor(model => model.Product_ID, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.TextBoxFor(model => model.Product_ID, new { @class = "form-control" })
                    @Html.ValidationMessageFor(model => model.Product_ID, "", new { @class = "text-danger" })
               </div>
         </div>

         .....

<div>
    @Html.ActionLink("Back to AddNewProduct", "AddNewProduct","Home" , new {Product_ID = Model.Product_ID})
</div>

    }

我可以使用此视图页面插入Product_ID。但是,点击此Back to AddNewProduct链接并调试AddNewProduct后,我看不到string Product_ID

的任何值

为什么此模型属性不能很好地绑定

3 个答案:

答案 0 :(得分:1)

您需要指定值。将您从get方法发送的Product_ID的值分配给类

Product_ID属性
public ActionResult Add_Product(string Product_ID)
     { 
            AddNewProduct sample = new AddNewProduct();
            sample.Product_ID = Product_ID;
            return View(sample);
     }

答案 1 :(得分:1)

要将文本框的值传递给Add_Product() GET方法,您需要使用javascript / jquery。用

替换@Html.ActionLink(..)
<a href="#" class="back">Back to AddNewProduct</a>

并添加以下脚本

var baseUrl = '@Url.Action("Add_Product", "Home")';
$('#back').click(function() {
    var id = $('#Product_ID').val();
    location.href = baseUrl + '/' + id;
}}

注意:location.href = baseUrl + '/' + id;假设您已定义了{controller}/{action}/{Product_ID}的特定路线,否则需要

location.href = baseUrl + '?Product_ID=' + id;

或者,将方法参数更改为string id,以便它使用默认路径

另请注意,您可能希望将方法更改为

public ActionResult Add_Product(string Product_ID)
{ 
    AddNewProduct sample = new AddNewProduct
    {
        Product_ID = Product_ID
    };
    return View(sample);
}

因此,如果您点击Back to AddNewProduct链接,该视图将显示您输入的上一个值。

答案 2 :(得分:0)

@Html.ActionLink的第二个参数是actionName,但您发送了模型名称(AddNewProduct)。将其更改为:

@Html.ActionLink("Back to AddNewProduct", "Add_Product","Home" , new {Product_ID = Model.Product_ID})

或者使用此重载(在使用此ActionLink重载时也需要发送null):

@Html.ActionLink("Back to AddNewProduct", "Add_Product","Home" , new {Product_ID = Model.Product_ID}, null)