Asp.net mvc 4 MVC4使用ActionLink和TempData从控制器中的文本框发送数据以查看

Asp.net mvc 4 MVC4使用ActionLink和TempData从控制器中的文本框发送数据以查看,asp.net-mvc-4,actionlink,tempdata,Asp.net Mvc 4,Actionlink,Tempdata,有没有一种方法可以利用带有ActionLink的TempData将数据从视图传递到控制器。我有一个具有客户端验证的视图,我需要在不使用提交按钮的情况下从页面上的文本框更新下拉列表。当使用两个提交类型按钮时,客户端验证会标记所有尚未填写的字段。本质上,我希望能够将用户定义的类别添加到下拉列表中,而无需跳转到不同的视图,只需一个文本框和提交按钮 我不确定我是否可以这样做: <input type="text" name="NewCat" value="@TempData["newCat"]"

有没有一种方法可以利用带有ActionLink的TempData将数据从视图传递到控制器。我有一个具有客户端验证的视图,我需要在不使用提交按钮的情况下从页面上的文本框更新下拉列表。当使用两个提交类型按钮时,客户端验证会标记所有尚未填写的字段。本质上,我希望能够将用户定义的类别添加到下拉列表中,而无需跳转到不同的视图,只需一个文本框和提交按钮

我不确定我是否可以这样做:

<input type="text" name="NewCat" value="@TempData["newCat"]" placeholder="New Catagory"/>

如果您想在客户端更新数据,请使用jQuery,特别是在不需要返回服务器获取数据的情况下。使用元素的click事件处理和操作客户端数据。差不多

$("#addmore").on('click', function() {
    $("#someSelect").append('<option value="someoption">Some Option</option>');
});
$(“#添加更多”)。在('click',function()上{
$(“#someSelect”).append('someoption');
});
这是我的解决方案

我提出了部分意见

主视图

<div class="asideRight">
    <fieldset>
        <legend></legend>
        @Html.Partial("_AddCat", new Exercise4.Models.Category())
    </fieldset>
</div>

这将仅在本地更新ddl,而不会将其添加到数据库中。最好关闭客户端验证,提交整个表单供控制器处理,并在验证模型以添加报价之前重定向回。至少我倾向于这样。在函数中,您还可以向服务器发送一个ajax帖子来更新数据。这与ajax不太熟悉。你能给我举个例子吗?
$("#addmore").on('click', function() {
    $("#someSelect").append('<option value="someoption">Some Option</option>');
});
<div class="asideRight">
    <fieldset>
        <legend></legend>
        @Html.Partial("_AddCat", new Exercise4.Models.Category())
    </fieldset>
</div>
@model Exercise4.Models.Category

<script src="~/Scripts/jquery-1.7.1.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>

@using (Html.BeginForm("addCat", "Quote")) {
    @Html.ValidationSummary(true)

    <fieldset>
        <legend class="myLegend">Create New Category</legend>

        <div class="editor-field">
            @Html.EditorFor(model => model.CatName)
        </div>

        <p>
            <input class="mySubmit" type="submit" value="Create" />
        </p>
    </fieldset>
    <div class="myValidation">
        @Html.ValidationMessageFor(model => model.CatName)
        @Html.ValidationMessage("")
    </div>
}
    [HttpPost]
    [Authorize]
    public ActionResult addCat(Category cat)
    {
        if (cat.CatName != null)
        {
            bool exists = db.Categories.Any(n => n.CatName.ToLower() == cat.CatName.ToLower());
            if (!exists)
            {
                db.Categories.Add(cat);
                db.SaveChanges();
            }
            else
            {
                ModelState.AddModelError("", "You entered a duplicate Category Name");
            }
        }

        ViewBag.CategoryID = new SelectList(db.Categories.OrderBy(n => n.CatName), "CategoryID", "CatName");
        return RedirectToAction("Create");
    }